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一个template,但是A<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 回答