-4

我是模板编程的初学者。

我在模板类中有三个模板函数:

// 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)
{ ... }

但是我收到一个错误,说有重新声明指向重新声明,我记得以前使用过这样的专业化并且效果很好。我在这里做错了什么?

我需要对它们进行专门化,因为我正在设置的一些数据结构需要我正在使用的图像类型的信息。

4

1 回答 1

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();
}

现场演示

于 2013-04-09T22:29:14.800 回答