Как переслать объявление функции-члена экземпляра шаблона

Различные ответы в этом блоге, по-видимому, определяются SE, которые способствуют строгому соблюдению обычных правил объектно-ориентированного программирования (используйте открытый класс с общедоступными общедоступными (aka static) и полностью квалифицированными ссылками на классы, или SE которые продвигают использование функции обратной совместимости (Module), для которой компилятор, очевидно, должен сделать то же самое, чтобы заставить его работать.

Будучи SE с опытом более 30 лет, я бы предложил следующие рекомендации:

  1. Если вы пишете весь новый код (не пытаетесь преобразовать устаревшее приложение), чтобы избежать использования этих форм вообще, за исключением редкого экземпляра, в котором вы действительно должны иметь статическую переменную, потому что они могут вызывать ужасные последствия (и очень трудно найти ошибки). (Многопоточный и многопроцессорный код требует семафоров вокруг статических переменных ...)
  2. Если вы изменяете небольшое приложение, которое уже имеет несколько глобальных переменных, затем сформулируйте их, чтобы они не были закрыты модулями, то есть нас e стандартные правила объектно-ориентированного программирования, чтобы воссоздать их как публичные статические и получить к ним доступ по полной квалификации, чтобы другие могли понять, что происходит.
  3. Если у вас есть огромное унаследованное приложение с десятками или сотнями глобальных переменных, обязательно используйте модули для их определения. Нет причин тратить время на то, чтобы приложение работало, потому что вы, вероятно, уже за 8-мя шарами, потраченными на свойства и т. Д.
0
задан IkoLogs 22 February 2019 в 11:50
поделиться

1 ответ

Вы должны добавить ключевое слово template перед imp_f3<T>(), как вы это делали для T_Src::template imp_f1<T>():

static_cast<T_Src*>(this)->template imp_f3<T>();

Посмотрите на этот вопрос для объяснение.

0
ответ дан sebrockm 22 February 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: