假设我有一个模板类定义为:
template < typename A, typename B >
class something { ... }
Run Code Online (Sandbox Code Playgroud)
如何测试类型A和B是否属于同一类型?我知道这可以在运行时使用typeid完成,但我真的需要这个是编译时测试.
另外,如果类型A和B相等,我该如何专门化该类?
在现实世界中,A将是某种类型的stl容器,例如std :: string,而B将是char或wchar_t.在内部我已经检查了容器value_type(如果不是预期的话,编译错误).如果B与容器value_type相同,则类中的大多数代码将变为冗余.
另外,如果类型A和B相等,我该如何专门化该类?
正是如此,专业:
template <typename A>
class something<A,A> { ... }
Run Code Online (Sandbox Code Playgroud)
模板使用模式匹配作为参数列表,如许多函数式编程语言中所见.
如何测试类型A和B是否属于同一类型?
您可以使用std::is_same或使用上述专业化.这取决于您的确切用例.