jos*_*hlk 1 c++ templates clang pass-by-reference c++14
如何使用按引用传递的参数显式实例化模板函数?
我有一个简单的模板化函数,它接受任何类型并将其转换为字符串:
template <typename T>
string to_string (const T &e) {
std::stringstream ss;
string str;
ss << e;
ss >> str;
return str;
}
Run Code Online (Sandbox Code Playgroud)
请注意,argument 参数e是通过引用传递的。
我现在想显式实例化不同数据类型的函数,例如:
template string to_string<string> (string);
template string to_string<double> (double);
Run Code Online (Sandbox Code Playgroud)
但是,编译器抱怨(由于显式实例化):
错误:“to_string”的显式实例化不引用函数模板、变量模板、成员函数、成员类或静态数据成员
模板字符串 to_string (string);
如果我将模板化函数的参数从const T &eto更改为const T e- 即删除引用 - 它可以编译并正常工作。
如何使用按引用传递的参数显式实例化模板函数?
工具链:
您也应该在显式实例化中指定参数作为参考。否则它们将与函数模板的签名不匹配。例如,如果T是double,则参数类型const T&应该是const double&。
template string to_string<string> (const string&);
template string to_string<double> (const double&);
Run Code Online (Sandbox Code Playgroud)