我对 C++20 概念仍然很陌生,我想知道为什么这不起作用。我想创建一个将数字连接为字符串的函数模板。所以我想尝试一些概念。我用了std::convertible_to
检查输入的数据类型(即int
在这种情况下)可以转换为std::string
。但我面临着一个我不明白的错误。
//building the concept
template <typename T>
concept ConvertibleToStdString = std::convertible_to<T,std::string>;
//using the concept
template <ConvertibleToStdString T>
std::string concatenate(T a, T b){
return std::to_string(a) + std::to_string(b);
}
int main(){
int x{623};
int y{73};
auto result = concatenate(x,y);
std::cout << result << std::endl;
return 0;
}
Error:
main.cpp:21:34: error: use of function 'std::string concatenate(T, T) [with T = int; std::string = std::basic_string<char>]' with unsatisfied constraints
21 | auto result = concatenate(x,y);
我究竟做错了什么 ?
您似乎想要一个可以传递给的类型的概念std::to_string()
.
这段代码将实现这一点。
template <typename T>
concept ConvertibleToStdString = requires(T a){ std::to_string(a); };
我究竟做错了什么 ?
你误解了它的意思std::convertible_to<T,std::string> https://en.cppreference.com/w/cpp/concepts/convertible_to.
这个概念验证了(除其他外)T
can 隐含地转换为std::string
, as in:
std::string s;
s = 623; // This will NOT compile. int is not convertible_to std::string
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)