在cpp中重载模板函数

Overloading template function in cpp

本文关键字:函数 重载 cpp      更新时间:2023-10-16

我有这个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)
{
    ...
}