Причина состоит в том, что при инстанцировании шаблона класса, все его объявления (не определения) его функций членства инстанцируют также. Шаблон класса инстанцируют точно, когда полное определение специализации требуется. Это имеет место, когда это используется в качестве базового класса, например, в качестве в Вашем случае.
Поэтому то, что происходит, - то, что A<B>
инстанцирован в [1 113]
class B : public A<B>
, в котором точка B
еще не является полным типом (это после закрывающей фигурной скобки определения класса). Однако A<B>::action
объявление требует B
быть завершенным, потому что это сканирования в пределах него:
Subclass::mytype
то, Что необходимо сделать, задерживает инстанцирование к некоторой точке, в которой B
завершено. Один способ сделать это состоит в том, чтобы изменить объявление action
для создания этого членским шаблоном.
template<typename T>
void action(T var) {
(static_cast<Subclass*>(this))->do_action(var);
}
Это все еще безопасно с точки зрения типов, потому что, если var
не имеет правильного типа, передавая var
к [1 111], перестанет работать.
Откройте файл Info.plist
, который также можно назвать ProjectName-Info.plist
, и добавьте новую строку. Столбец «Ключ» представляет собой раскрывающийся список, щелкните его и прокрутите довольно большой набор ключей в удобочитаемой форме, которые можно установить.
Тот, который вы ищете, называется «Значок уже включает глянец. и эффекты скоса », то есть в удобочитаемой форме. Также работает запись UIPrerenderedIcon
.
Добавление этого флага также отключит автоматическое добавление глянца и скоса в Tunes Store и в App Store.
In your info.plist file, add a key called UIPrerenderedIcon
and set its value to true.
This will prevent the sdk from automatically adding the glossy shine to your icon