假设我有一个定义为的模板类:

template < typename A, typename B >
class something { ... }

如何测试A和B类型是否相同?我知道这可以在运行时使用typeid来完成,但我确实需要将其作为编译时测试。

另外,如果类型A和类型B相等,我该如何专门化该类?

在现实世界中,A将是某种STL容器,例如std::string,而B将是char或wchar_t。在内部,我已经检查了容器的value_type(如果不是预期的,则编译错误)。如果B与容器value_type相同,则该类中的大多数代码将变得多余。

最佳答案



正是这样,专门化:

template <typename A>
class something<A,A> { ... }

模板将模式匹配用于其参数列表,就像在许多功能编程语言中一样。



您可以使用std::is_same,也可以使用如上所述的特化。这取决于您的确切用例。

关于c++ - 测试模板参数是否相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17486976/

10-11 22:08
查看更多