если бы C знал фактический тип P1, а не PackageBase?
Да, фактически надо узнать тип. ну т.е. is_package(P1<2,4>) было бы достаточно. просто узнать тип
я поэтому про variant и подумал
Ну тогда для C<P1<2, 4>> это вопрос о сравнении его динамического типа и C<P1<2, 4>> и для этого можно не включать RTTI если он выключен - достаточно там struct CBase { virtual const char* type_handle() const = 0; }; template <typename T> class C : public CBase { static constexpr char * name() { return __FUNCTION__; } const char* type_handle() const override { return name(); } };
Блин, не въезжаю… можешь показать пример использования? Как мы создаем С в системе?
Да как хотим, C<P1>{ /*forward to P1 ctor*/ }; уже работает. Полиморфное C это CBase&
Ну т.е. мы создаем кучу С под каждый тип, так?
Под каждый PackageBase, да. При этом никто нас не заставляет, скажем, не писать функции в CBase
Обсуждают сегодня