具有新模板的类中的模板特化

时间:2013-11-28 22:01:34

标签: c++ templates overloading template-specialization

我的代码类似于:

class test {
template <typename T>
 void func(T rhs);

template <typename V>
void func(std::vector<V> rhs);
};

我可以这样做吗?这似乎是一种专业化,但我必须引入一个新的模板。 gcc也告诉我这样的错误,当我尝试这样做时:

template<>
template<V>
void func(std::vector<V> rhs);

explicit specialization in non-namespace scope
too many template-parameter-lists

1 个答案:

答案 0 :(得分:0)

您不需要专门化,只需内联它:

class test {
    template <typename T>
    void func(T rhs)
    {
    // Your plain T code goes here
    }

    template <typename V>
    void func(std::vector<V> rhs)
    {
    // Your vector specialized code goes here (no extra specialization needed)
    }
};

或者,如果您希望将定义分离到.tcc文件,请执行以下操作:

<强> test.h:

class test {
public:
    template <typename T>
    void func(T rhs);

    template <typename V>
    void func(std::vector<V> rhs);
};

#include "test.tcc"

<强> test.tcc:

template <typename T>
void test::func(T rhs)
{
    std::cout << "Your plain T code goes here" << std::endl;
}

template <typename V>
void test::func(std::vector<V> rhs)
{
    std::cout << "Your vector specialized code goes here" << std::endl;
}

ideone处的完整工作样本。