专业化在C ++中被视为重载

时间:2013-04-09 22:21:01

标签: c++ templates opencv

我是模板化编程的初学者。

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

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

但是我得到一个错误,说有重新声明指向重新声明 我记得之前使用过这样的专业化,它运行良好。我在这做错了什么?

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

1 个答案:

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

Live demo