我的代码类似于:
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
答案 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处的完整工作样本。