我正在使用 Visual Studio 2013 RTM。
我正在尝试编写一个与多个字符之一匹配的可变参数模板。递归案例很简单,但我正在努力编写基本案例。
template <char C, char... Cs>
auto char_match(char c) -> bool
{
return c == C || char_match<Cs...>(c);
}
我尝试了以下作为基本情况,但没有奏效。我知道你可以用类模板做到这一点,而且我很确定你不能用函数模板做到这一点。
template <>
auto char_match(char c) -> bool
{
return false;
}
错误 C2912:“bool char_match(char)”的显式特化不是函数模板的特化
我还尝试在返回类型上使用 std::enable_if,但微软不喜欢它。
template <char C, char... Cs>
typename std::enable_if<sizeof...(Cs) != 0, bool>::type char_match(char c)
{
return c == C || char_match<Cs...>(c);
}
template <char C, char... Cs>
typename std::enable_if<sizeof...(Cs) == 0, bool>::type char_match(char c)
{
return c == C;
}
错误 C2039:“类型”:不是“std::enable_if”的成员
我将不胜感激有关如何完成这项工作的任何建议。