2014-10-11 2 views
0

Я пишу класс в TMP для выполнения базовой обработки строк. Строка представлена ​​в виде вариационного шаблона класса символов. Я хочу проверить, являются ли две строки равными и, если они есть, имеют связанный тип, но я не знаю, как бы я мог проверить, равны ли два символа во время компиляции. Мой текущий код выглядит следующим образом, но не скомпилирован по понятным причинам.Соответствующие переменные в шаблоне метапрограммирования C++

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]; 
}; 

NamedType :: имя Const символ шаблона [SizeOf ... (ХР) +1] = {... ХР, '\ 0'};

ответ

3

Если строки являются специализациями вариационного шаблона, просто сравните типы для равенства с помощью std::is_same. Результирующий тип составляет std::integral_constant с bool как тип значения - в частности, либо std::true_type, либо std::false_type.

Смежные вопросы