специализация шаблона в классах с новым шаблоном

0

У меня есть код, похожий на этот:

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
    Вы не специализируете V в своем примере кода. Должно быть int , double или MyClass , не так ли?
  • 0
    Я пытаюсь использовать функцию для общих типов и для вектора, но также и для общих типов. Когда я пытаюсь это сделать, компилятор берет самую общую функцию, поэтому ту, что с T.
Теги:
templates
overloading
template-specialization

1 ответ

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

Полностью рабочий образец на идеоне.

  • 0
    Нет, с тех пор у меня есть класс для каждого вводимого типа, но я хочу, чтобы функция имела шаблон. Поэтому я хочу функцию для, скажем, int, double и т. Д. И функцию для векторов для этих типов.
  • 0
    @ user2988020 Хорошо, понял. Но тогда вы не хотите специализации, я бы сказал.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню