Возможно ли получить доступ к значениям параметров шаблона непигового типа в специализированном шаблоне?Возможно ли получить доступ к значениям параметров шаблона непигового типа в специализированном классе шаблонов?
Если у меня есть класс шаблона со специализацией:
template <int major, int minor> struct A {
void f() { cout << major << endl; }
}
template <> struct A<4,0> {
void f() { cout << ??? << endl; }
}
Я знаю, что это выше случае просто Кодирую значения 4 и 0 вместо того чтобы использовать переменные, но то, что у меня есть больший класс, который я специализирующуюся и я хотел бы иметь доступ к значениям.
Возможно ли в A < 4,0 для доступа к major
и minor
значениям (4 и 0)? Или я должен назначить их на шаблон конкретизации как константы:
template <> struct A<4,0> {
static const int major = 4;
static const int minor = 0;
...
}
Если вы специализируетесь на значениях, то это означает, что есть что-то особенное в отношении этих конкретных значений. Если вы используете их в качестве общих значений во всем шаблоне и рассматриваете их как специальные в нескольких местах, возможно, вы можете абстрагироваться от специального поведения на меньший шаблон специализированного класса, оставляя большой шаблон полностью универсальным и неспециализированным. Это немного сложно сказать, так что вы можете расширить свой вопрос, чтобы быть более «реальным»? –
Я думаю, что вопрос достаточно велик. У меня есть базовый класс, который реализует конкретное поведение на основе версии протокола. Раньше у него был член, который возвращал версию протокола - поскольку этот элемент больше не был доступен, был метод ведения журнала, который включал в себя версию протокола. Я мог просто жестко кодировать значения, но я хотел знать, есть ли лучший способ. Принятый ответ обеспечивает хороший способ сделать это - я фактически использую черты сходным образом в других местах - для получения типов параметров, но намерение - то же самое. – stefanB