【发布时间】:2013-04-21 01:20:39
【问题描述】:
我想知道如何编写一个type_traits 类来检测两种类型是否是同一个模板类的特化。最大的问题是它应该适用于混合类型/非类型模板类,例如:
template <typename T, std::size_t N>
class MyClass {};
有可能设计出这样的东西吗?
【问题讨论】:
-
@rhalbersma,不是重复的,另一个问题想知道如何判断两个专业化是否使用相同的定义,即都使用主模板,或者都使用相同的部分专业化,或者两者都使用使用相同的显式特化。据我所知,这不是这里的问题。
-
@Vincent,该特征是否需要用于检测 any 类模板的使用,还是仅用于
MyClass?我认为一般来说类模板不可能同时使用类型和非类型参数。 -
@JonathanWakely 删除了评论,似乎无法撤回近距离投票。
-
@JonathanWakely:不,它应该适用于任何类型/非类型模板参数的组合,这就是整个问题......
-
基本上,您想做元元编程——在元程序的域上编写程序 (
templates)。 C++ 元元编程工具是有限的。使用 C++17 中可能出现的template< using typename T,语法,您可能会更接近,但现在您可以遵循 C++03 用来模拟template<typename...T,的“变量仿真”模式,除了额外的参数的指数或超指数膨胀(每个参数的每个整数类型、函数指针类型 (!) 和模板类型 (!!))。enums 在 C++17 之前可能是无望的。
标签: c++11 template-specialization template-meta-programming typetraits