#c #templates #specialization
#c #шаблоны #специализация
Вопрос:
Я пишу класс, который имеет шаблонную специализацию по значению, и мне было интересно, должны ли конструктор и методы с шаблонной специализацией также иметь <ЗНАЧЕНИЕ> в своем объявлении.
Другими словами, какой из следующих двух примеров правильный?
A)
template <int i>
class MyClass {};
template <>
class MyClass<0> {
public:
MyClass<0>() { // specialization value included
// initialize stuff
}
void PrintClass<0> () { // specialization value included
// print stuff
}
}
Б)
template <int i>
class MyClass {};
template <>
class MyClass<0> {
public:
MyClass() { // specialization value NOT included
// initialize stuff
}
void PrintClass () { // specialization value NOT included
// print stuff
}
}
Комментарии:
1. Там будет введенное имя класса,
MyClass
ссылающееся наMyClass<0>
.2. В @dyp отсутствуют неприятные макросы, они, вероятно, есть 😉
3. @dyp: Теперь добавлены возвращаемые типы. Спасибо
4. @dyp: возможно, вопрос n00b, но что это значит — «будет введенный MyClass с именем класса, ссылающийся на MyClass<0>»?
5. @raovgarimella везде внутри класса
MyClass
означаетMyClass<i>
для шаблона класса илиMyClass<0>
для специализации дляi==0
. имяMyClass
буквально «вводится» в его собственную область видимости.