测试模板参数是否相等

Twi*_*fty 1 c++ templates

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

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相同,则类中的大多数代码将变为冗余.

Seb*_*ach 6

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

正是如此,专业:

template <typename A>
class something<A,A> { ... }
Run Code Online (Sandbox Code Playgroud)

模板使用模式匹配作为参数列表,如许多函数式编程语言中所见.

如何测试类型A和B是否属于同一类型?

您可以使用std::is_same或使用上述专业化.这取决于您的确切用例.