c++ - 在cpp中重载模板函数

标签 c++ templates matching

我有这个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 说“无法将函数定义与现有声明匹配”

这段代码有什么问题?

最佳答案

将这些声明全部放入命名空间 A { ... } 中并删除 A::。另一方面,函数模板部分特化是不允许的,这会出错:

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

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

相关文章:

c++ - 使用 AVX vector 警告编译旧版 GCC 代码

c++ - C++中的组合数(N选R)

c++ - 奇怪的文件输出 C++

c++ - 在模板实例化和外部模板声明中使用 typedef

c++ - 在类构造函数中调用非默认模板构造函数

regex - 如果原始列表不匹配,如何知道列表中字符串的变体(例如缩写)是否与另一个列表匹配?

python - 如何在没有匹配索引的情况下更新列表值

c++ - core dumped,但没有找到错误位置,有GDB的错误信息

c++ - 类型推导不适用于 std::function

ruby - 如何改进这种二分匹配解决方案?