У меня есть код, похожий на этот:
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
Вам не нужно специализироваться, просто введите его:
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;
}
Полностью рабочий образец на идеоне.
V
в своем примере кода. Должно бытьint
,double
илиMyClass
, не так ли?