我是模板化编程的初学者。
我在模板化类中有三个模板化函数:
// initialize the model (generic template for any other type)
template <typename ImgDataType>
void GrimsonGMMGen<ImgDataType>::InitModel(const cv::Mat& data) // data is an rgb image
{ ... }
template<>
void GrimsonGMMGen<cv::Vec3b>::InitModel(const cv::Mat& data)
{...}
template<>
void GrimsonGMMGen<float>::InitModel(const cv::Mat& data)
{ ... }
但是我得到一个错误,说有重新声明指向重新声明 我记得之前使用过这样的专业化,它运行良好。我在这做错了什么?
我需要专门化它们,因为我设置的一些数据结构需要我正在使用的图像类型的信息。
答案 0 :(得分:1)
您在问题中尝试做的事情肯定有效:类模板的成员函数可以单独专门(完全)。例如:
#include <iostream>
template <typename T> struct Foo
{
void print();
};
template <typename T> void Foo<T>::print()
{
std::cout << "Generic Foo<T>::print()\n";
}
template <> void Foo<int>::print()
{
std::cout << "Specialized Foo<int>::print()\n";
}
int main()
{
Foo<char> x;
Foo<int> y;
x.print();
y.print();
}