cpp中C++模板化的函数重载
C++ templated function overload in cpp
我只是想知道:在诸如之类的头中声明模板函数(而不是成员函数)可以吗
template<class I>
inline I f(const cv::Mat & inMat)
{
throw(std::logic_error("No override found for this type of image"));
}
然后,定义cpp文件中允许的内容,如下所示:
template<>
ImageRgbT f<ImageRgbT>(const cv::Mat & inMat)
{
}
我尽量不使用专业课。
您需要在标头中声明您的专业化:
template<>
ImageRgbT f<ImageRgbT>(const cv::Mat & inMat);
否则,根据[temp.exp.spec]/6:,您的程序是格式错误的NDR
如果模板、成员模板或类模板的成员是显式专门化的,则应在首次使用该专门化之前声明该专门化,这将导致隐式实例化在发生这种使用的每个翻译单元中发生;不需要进行诊断。
违反此规则可能导致编译器在一个翻译单元中为f<ImageRgbT>
发出一个定义(从主模板实例化),在包含显式专用化的翻译单元中发出另一个定义,从而导致链接器故障。它似乎只在你的情况下起作用,因为你很幸运,而且不需要诊断。
如果专用化是在标头中声明的,那么在单独的文件中定义就没有问题。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- c++:可变模板和函数重载
- 在缺少函数重载时抛出异常,并带有 std::variant 而不是编译时错误
- 解决模板成员函数重载
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 推断模板化函数中的函数重载
- C++复制函数重载导致"must be a nonstatic member function"错误
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 可变参数泛型 lambda 和函数重载
- C++中的函数重载和继承
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- C/C++ 可变参数宏函数重载
- 将基类的成员函数重载到其他派生类C++
- C++ 函数重载匹配
- C++函数重载,具体步骤是什么
- C++:使用 param pack 显式调用函数重载
- 隐式生成的函数重载用于右值参数?
- 使用函数重载输入运算符
- 运算符重载函数上的函数重载