通过引用传递参数时模板的显式实例化

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- 即删除引用 - 它可以编译并正常工作。

如何使用按引用传递的参数显式实例化模板函数?

工具链:

  • C++14
  • clang 版本 11.0.0 (MacOS)

son*_*yao 5

您也应该在显式实例化中指定参数作为参考。否则它们将与函数模板的签名不匹配。例如,如果Tdouble,则参数类型const T&应该是const double&

template string to_string<string> (const string&);
template string to_string<double> (const double&);
Run Code Online (Sandbox Code Playgroud)