【发布时间】:2021-06-16 06:29:32
【问题描述】:
有人可以在下面的代码 sn-p 中解释 AdditionFeasible 概念如何支持 char 数据类型,以及我们如何防止这种情况并确保它仅适用于数字?
template< class T >
concept AdditionFeasible = requires(T& f, T& s)
{
f + s;
};
template <AdditionFeasible f>
f sum(f a, f b)
{
return a + b;
}
int main()
{
std::cout<<"sum of 2 and 3 is "<<sum(2,3)<<std::endl;
std::cout<<"sum of 'K' and 'V' is"<<sum('K','V')<<std::endl;
return 0;
}
【问题讨论】:
-
字符是数字。我们一直在
ch - '0'这样的结构中使用它。 -
同意内部字符是数字,但有什么方法可以区分它们并确保函数只适用于实数,否则会引发有意义的错误
-
角色并非不真实。它们只是数字(不是“内部”,而是各种意义上的数字)。加法和所有其他操作对他们来说非常有意义。
-
您可以使用
require !std::same_as<char>或任何语法来排除char(或您想要的任何其他类型),但它是任意且反复无常的。
标签: c++ c++20 c++-concepts