获得"子类型"来自模板类

时间:2015-01-21 11:41:04

标签: c++ templates c++11

假设我有班级

template<
    typename T1, /*this is probably an integral type*/
    T1 Default /*this is a typical value of that integral type*/
> class Foo {};

并为给定的T1Default实例化,例如foo

我可以使用decltype(foo)来获取完整的类型。

我可以使用一些语法来获取值Default吗?

2 个答案:

答案 0 :(得分:5)

在课堂上使用typedef

template<
    typename T1,
    typename T2
> class Foo 
{
public:
   typedef T1 type1;
   typedef T2 type2;
};

要获得默认值,您可以使用相同的语法。

template<
    typename T1,
    T1 Default
> class Foo 
{
public:
   typedef T1 type1;
   static constexpr const T1 default_value = Default;
};

答案 1 :(得分:4)

你也可以编写一个元函数来解决它:

template <typename T> struct my_trait;

template <typename T, T Value>
struct my_trait<Foo<T, Value>>
{
    using T1 = T;
    static const T1 Default = Value;
};

因此使用:

Foo<int, 42> myfoo;
std::cout << "Default is " << my_trait<decltype(myfoo)>::Default;