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

问题描述 投票:1回答:1

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

我有一个简单的模板化函数,它可以采用任何类型并将其转换为字符串:

template <typename T>
string to_string (const T &e) {
    std::stringstream ss;
    string str;
    ss << e;
    ss >> str;
    return str;
}

注意,参数参数e通过引用传递。

我现在想为不同的数据类型显式实例化该函数,例如:

template string to_string<string> (string);
template string to_string<double> (double);

但是,编译器抱怨(由于显式实例化:]:>

错误:“ to_string”的显式实例化未引用函数模板,变量模板,成员函数,成员类或静态数据成员

模板字符串to_string(string);

[如果我将模板化函数的参数从const T &e更改为const T e-即删除引用-它将编译并正常工作。

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

工具链:

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

如何通过引用传递的参数显式实例化模板函数?我有一个简单的模板化函数,该函数可以采用任何类型并将其转换为字符串:template

c++ templates clang c++14 pass-by-reference
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.