0

クラスからテンプレート タイプを抽出するにはどうすればよいですか。

たとえば、次のようなクラスがあります。

template <typename T, typename T2 = def>
class A
{
    typedef T type;
    typedef T2 type2;
    //other stuff
}

type2そして、他のテンプレートで使用したい:

template <typename G>
foo(A<G> a)
{
    //This doesn't work:
    std::vector<a::type2> vec;

    //Neither does this:
    std::vector<a->type2> vec;

    //or this:
    std::vector<typename a::type2> vec;

}

type2では、インスタンスの内容を特定するにはどうすればよいでしょうかa(デフォルトではないa値を持つことができます)。type2

4

2 に答える 2

4

これはうまくいくはずです:

std::vector<typename A<G>::type2> vec;

理由:std::vectorは引数として完全な型を期待しており、単にAですtemplateA<G>、完全な型になります。あなたの例から、私は言及A<G>しましたがA<int>A<char>何でもかまいません。

于 2012-09-06T02:22:09.950 に答える
0

コンパイラがサポートしている場合は、このdecltype機能を使用してオブジェクトの型に名前を付けることができます。

template <typename G>
void foo(A<G> a)
{
    std::vector<typename decltype(a)::type2> vec;
}

この例でdecltype(a)は、タイプはA<G>です。

于 2012-09-06T04:14:02.373 に答える