tagged_msg テンプレート・クラス

概要

タグとメッセージで構成されるテンプレート・クラス。メッセージは定義型の 1 つにできる値です。

構文

template<typename TagType, typename T0, typename T1...typename TN>
 class tagged_msg;

ヘッダー

 #include "tbb/flow_graph.h"

説明

tagged_msg テンプレート・クラスは、型が実行時に決定されるメッセージ用です。T0, T1 ...TN 型のメッセージは、TagType 型でタグ付けされます。タグはメッセージを識別するのに使用できます。フローグラフでは、tagged_msgindexer_node の出力として使用されます。

tagged_msg は実装にタプルを使用しているため、タプルで保持できる型の数の制限が tagged_msg にも適用されます。

サンプル

#include<iostream>
#include "tbb/flow_graph.h"

typedef tbb::flow::tagged_msg<size_t, int, char, double> tagged_msg_type;

void print_type_and_value(const tagged_msg_type &tm) {
    if (tm.tag()==1 && tm.is_a<int>()) 
        std::cout << "Type is an int, value is : " << tm.cast_to<int>() << std::endl;
    else if (tm.tag()==2 && tbb::flow::is_a<char>(tm)) 
        std::cout << "Type is a char, value is : " << tbb::flow::cast_to<char>(tm) << std::endl;
    else if (tm.tag()==3 && tm.is_a<double>()) 
        std::cout << "Type is a double, value is : " << tm.cast_to<double>() << std::endl;
    else std::cout << "Invalid tag or type" << std::endl;
}

int main() {
    print_type_and_value(tagged_msg_type(1, 8));
    print_type_and_value(tagged_msg_type(2, 'c'));
    print_type_and_value(tagged_msg_type(3, 23.78));
    print_type_and_value(tagged_msg_type(4, 12));
    
    return 0;
}

この例で、関数 print_type_and_value は、intchar または double のいずれかの値を保持できるタグ型 size_ttagged_msg を受け取り、格納されている型と値を出力します。異なるタグおよび値の型の tagged_msg オブジェクトが関数に渡され、タグを使用して値の識別と取得が行われます。値の取得には、tagged_msg::cast_to テンプレート・メソッドまたは tbb::flow::cast_to テンプレート関数のいずれかが使用されます。

例を実行すると、次の出力が生成されます。

 
Type is an int, value is : 8
Type is a char, value is : c
Type is a double, value is : 23.78
Invalid tag or type

メンバー

namespace tbb {
namespace flow {
    template<typename TagType, typename T0, typename T1...typename TN>
    class tagged_msg {
    public:
        template<typename T, typename R>
        tagged_msg(T const &index, R const &val);

        TagType tag() const;

        template<typename V>
        const V& cast_to() const;

        template<typename V>
        bool is_a() const; 

    };

    // 次の関数はテンプレート・コンテキストの tagged_msg の使用を単純化します

    template<typename V, typename T>
    const V& cast_to(T const &t);

    template<typename V, typename T>
    bool is_a(T const &t);
}
}
次の表は、このテンプレート・クラスのメンバーの詳細な情報を提供します。
メンバー 説明
template<typename T, typename R> tagged_msg(T const &index, R const &value)

タグ index および値 valtagged_msg を構築します。

TagType tag() const

現在のタグを返します。

template<typename V> const V& cast_to() const

tagged_msg に格納されている値を返します。値が V 型でない場合、std::runtime_error 例外がスローされます。

template<typename V> bool is_a() const

Vtagged_msg で保持されている値の型の場合は true。その他の場合は false。

tagged_msg オブジェクトに適用される独立したテンプレート関数 cast_to および is_a は、そのオブジェクトの対応するメソッドの呼び出しと等価です。

関連情報