【发布时间】:2019-04-19 10:54:17
【问题描述】:
我正在尝试从成员模板函数调用成员函数,但它 抱怨没有成员函数的重载。我如何解决它? 下面是测试代码。
class Test
{
public:
template <typename T>
void foo(int i, T param)
{
switch (i)
{
case 1:
fun(param);
break;
case 2:
bar(param);
}
}
void fun(string p)
{
std::cout << "string: " << p << std::endl;
}
void bar(double p)
{
std::cout << "double: " << p << std::endl;
}
};
int main() {
Test t;
t.foo(1, "hello");
t.foo(2, 100.0);
return 0;
}
错误:没有匹配的函数调用 'Test::fun(double&)'
【问题讨论】:
-
我认为您对模板的作用感到困惑。它们从字面上编译,就好像你要用你写的任何东西替换每个'T'。所以它也尝试调用一个需要双精度的
fun。即使在运行时它没有被调用。当您将 2 传递给函数时。该错误应该指向fun(param);。尝试制作一个非模板foo并将所有 T 替换为双精度。您希望编译器给出什么错误?
标签: c++ c++11 templates member-functions