在模板元编程c ++中匹配变量

时间:2014-10-11 23:05:30

标签: c++ variadic-templates template-meta-programming

我在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'};

1 个答案:

答案 0 :(得分:3)

如果字符串是可变参数模板的特化,只需通过std::is_same比较相等的类型。生成的类型为std::integral_constant,其中bool为值类型 - 具体而言,为std::true_typestd::false_type