我有这个hpp

namespace A
{
    template<class T>
    class MyC
    {
    public:
        T a;
    };

    template<class T>
    void F(T r);
}

和这个cpp
template<>
void A::F<double>(double r)
{
    r;
}

template<>
void A::F<int>(int r)
{
    r;
}

template<class T>
void A::F<A::MyC<T>>(A::MyC<T> r)
{
    r;
}
template void A::F<A::MyC<int>>(A::MyC<int>);
template void A::F<A::MyC<double>>(A::MyC<double>);

但是编译器说“无法使函数定义与现有声明匹配” 关于F。

此代码有什么问题?

最佳答案

将这些声明全部放入namespace A { ... }中,然后删除A::。另一方面,不允许功能模板部分特化,这将导致错误:

template<class T>
void F<MyC<T>>(MyC<T> r)
{
    ...
}

关于c++ - cpp中的重载模板功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20564499/

10-11 00:26