C++ 专门化错误:模板成员函数和重载的非模板函数之间的Confirct
我想在一个模板类中放置两个不同的方法,一个应该是函数模板,另一个是同名的非模板函数。这是一个玩具模型的代码,它不是在gcc下编译的,而是在VisualStudio下编译的C++ 专门化错误:模板成员函数和重载的非模板函数之间的Confirct,c++,C++,我想在一个模板类中放置两个不同的方法,一个应该是函数模板,另一个是同名的非模板函数。这是一个玩具模型的代码,它不是在gcc下编译的,而是在VisualStudio下编译的 #include <iostream> template <typename T> struct A { template <int N> T f (T x) { return N*x; } T f (T x) {
#include <iostream>
template <typename T>
struct A
{
template <int N>
T f (T x)
{
return N*x;
}
T f (T x)
{
return f<15>(x);
}
};
template <>
template <int N>
double A<double>:: f(double x)
{
return 0;
}
int main()
{
double x=3;
A<double> a;
std::cout<<a.f<2>(x)<<" "<<a.f(x)<<std::endl;
return 0;
}
#包括
模板
结构A
{
模板
tf(tx)
{
返回N*x;
}
tf(tx)
{
返回f(x);
}
};
模板
模板
双A::f(双x)
{
返回0;
}
int main()
{
双x=3;
A A;
std::cout您可以添加默认模板参数并删除第二个重载
template <typename T>
struct A
{
template <int N = 15>
T f (T x)
{
return N*x;
}
};
模板
结构A
{
模板
tf(tx)
{
返回N*x;
}
};
您可以添加默认模板参数并删除第二个重载
template <typename T>
struct A
{
template <int N = 15>
T f (T x)
{
return N*x;
}
};
模板
结构A
{
模板
tf(tx)
{
返回N*x;
}
};
为什么要对返回0的双精度进行专门化?你想让它打印0还是6 45?实际上,这是我需要的代码的一个简单玩具模型,我只是在那里放了一些东西来检查行为为什么对返回0的双精度进行专门化?你想让它打印0还是6 45?实际上,这是我需要的代码的一个简单玩具模型,我只是I don’我没有放一些东西来检查行为谢谢,我已经尝试过了,但是这样我就失去了与我的Visual Studio版本的兼容性,它只允许在类模板上使用默认模板参数。我需要同时遵守这两个参数。不幸的是,还有其他可能的解决方法吗?@Amaicch我想不出没有def的任何解决方案ault模板参数,对不起……谢谢,我已经尝试过了,但是这样我就失去了与Visual Studio版本的兼容性,Visual Studio只允许在类模板上使用默认模板参数。我需要同时使用这两种参数。不幸的是,还有其他可能的解决方法吗?@Amaicch如果没有默认模板,我想不出任何解决方案我的论点是,对不起。。。