gpt4 book ai didi

c++ - 如何匹配模板参数字符集

转载 作者:太空狗 更新时间:2023-10-29 20:04:30 26 4
gpt4 key购买 nike

我使用的是 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;
}

error C2039: 'type': 不是 'std::enable_if' 的成员

我将不胜感激关于如何使这项工作的任何建议。

最佳答案

关于您的“特化”,没有什么比主模板更专业的了,所以这行不通。我认为最简单的解决方案是使用类模板:

template <char ...> struct char_match_impl;

template <> struct char_match_impl<>
{
static bool go(char) { return false; }
};

template <char C, char ...Cs> struct char_match_impl<C, Cs...>
{
static bool go(char c) { return c == C || char_match_impl<Cs...>::go(c); }
};

template <char ...Cs>
bool char_match(char c)
{ return char_match_impl<Cs...>::go(c); }

关于c++ - 如何匹配模板参数字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com