У меня есть следующие классы:Как я специализируюсь/перегрузить функцию шаблона для шаблонного типа
template <class... T>
class thing {};
template <class T>
class container {
public:
container() {
std::cout << "normal constructor" << std::endl;
}
};
Я могу написать полную специализацию для конструктора container<int>
таким образом:
template <>
container<int>::container() {
std::cout << "int constructor" << std::endl;
}
Мне хотелось бы иметь возможность определить аналогичный конструктор для container<thing<T>>
. Я думаю, что я пытаюсь написать это частичная специализация функции шаблона Вот что я пытаюсь (что является незаконным.):
template <class T>
container<thing<T>>::container() {
}
Это не компилируется.
Я не совсем уверен, как правильно решить эту проблему, и линии между тем, что перегрузка и специализация для функции класса шаблона становятся размытыми. Может ли это быть тривиально решено или потребуется ли type_traits (std::enable_if
)? Как я могу это решить?
очень элегантное решение (IMHO) – max66
@ max66 Спасибо. Частичная специализация всего класса может быстро привести к дублированию кода, я обычно стараюсь избегать его, если это возможно. – skypjack
@ max66 Добавлено больше деталей только в случае нескольких конструкторов _specialized_. Надеюсь, вам понравится. ;-) – skypjack