从模板 class 获取 "sub-type"
Getting a "sub-type" from a template class
假设我有 class
template<
typename T1, /*this is probably an integral type*/
T1 Default /*this is a typical value of that integral type*/
> class Foo {};
以及给定 T1
和 Default
的实例化,比如 foo
.
我可以用decltype(foo)
得到完整的类型
是否有一些语法可以用来获取值 Default
?
只需在 class 中使用 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;
};
也可以写个元函数拉出来:
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;
假设我有 class
template<
typename T1, /*this is probably an integral type*/
T1 Default /*this is a typical value of that integral type*/
> class Foo {};
以及给定 T1
和 Default
的实例化,比如 foo
.
我可以用decltype(foo)
得到完整的类型
是否有一些语法可以用来获取值 Default
?
只需在 class 中使用 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;
};
也可以写个元函数拉出来:
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;