C++ 专门化错误:模板成员函数和重载的非模板函数之间的Confirct

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) {

我想在一个模板类中放置两个不同的方法,一个应该是函数模板,另一个是同名的非模板函数。这是一个玩具模型的代码,它不是在gcc下编译的,而是在VisualStudio下编译的

#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如果没有默认模板,我想不出任何解决方案我的论点是,对不起。。。