我在TMP中编写一个类来进行一些基本的字符串处理。字符串表示为chars的类可变参数模板。我想测试两个字符串是否相等,如果它们是相同的,有一个相关的类型存在,但我不知道如何测试两个字符在编译时是否相等。我当前的代码如下所示,但由于显而易见的原因而无法编译。
template <typename T, char firstChar, char... Chrs>
class NamedType
{
public:
typedef T Type;
template <char otherFirst, char... OtherChrs>
class TypeIfMatch
{
};
template <firstChar, char... OtherChrs>
class TypeIfMatch
{
public:
typedef NamedType<T, Chrs>::TypeIfMatch<OtherChars>::type type;
};
template <>
class TypeIfMatch
{
public:
typedef Type type;
};
static const char name[sizeof...(Chrs) + 1];
};
模板const char NamedType :: name [sizeof ...(Chrs)+1] = {Chrs ...,'\ 0'};
答案 0 :(得分:3)
如果字符串是可变参数模板的特化,只需通过std::is_same
比较相等的类型。生成的类型为std::integral_constant
,其中bool
为值类型 - 具体而言,为std::true_type
或std::false_type
。