C++ const ref vs 模板概念
c++ const ref vs template concept
我正在研究模板的 c++20 规范,详细了解概念。
目前为了将参数传递给函数,我使用 const ref:
void writeMsg(const std::string& msg) {
std::cout << "msg = " << msg << "\n";
}
我现在才发现模板也可以用,有了概念我可以控制传递的参数。示例:
template<typename T>
concept is_string = std::is_convertible<T, std::string>::value;
template<is_string T>
void writeMsg2(T&& msg) {
std::cout << "msg =" << msg << "\n";
}
我个人无法理解其中的好处,也许我的案例从这些概念中获得好处是错误的?你有什么建议或链接可以帮助我解决这个问题吗?
谢谢
正如您介绍的那样:可转换为 std::string
的类型在调用 std::cout
之前不需要转换(可能节省内存 [de] 分配)。
这是我在查看您的代码时可以看到的唯一大优势。然而,稍微翻转一下:
template <class T>
concept String = std::is_convertible<T, std::string>::value;
void writeMsg2(String auto const& msg) {
std::cout << "msg = " << msg << "\n";
}
我正在研究模板的 c++20 规范,详细了解概念。
目前为了将参数传递给函数,我使用 const ref:
void writeMsg(const std::string& msg) {
std::cout << "msg = " << msg << "\n";
}
我现在才发现模板也可以用,有了概念我可以控制传递的参数。示例:
template<typename T>
concept is_string = std::is_convertible<T, std::string>::value;
template<is_string T>
void writeMsg2(T&& msg) {
std::cout << "msg =" << msg << "\n";
}
我个人无法理解其中的好处,也许我的案例从这些概念中获得好处是错误的?你有什么建议或链接可以帮助我解决这个问题吗?
谢谢
正如您介绍的那样:可转换为 std::string
的类型在调用 std::cout
之前不需要转换(可能节省内存 [de] 分配)。
这是我在查看您的代码时可以看到的唯一大优势。然而,稍微翻转一下:
template <class T>
concept String = std::is_convertible<T, std::string>::value;
void writeMsg2(String auto const& msg) {
std::cout << "msg = " << msg << "\n";
}