如何在C中检索基类的类型?
发布时间:2020-12-16 05:45:23 所属栏目:百科 来源:网络整理
导读:对于这个特定的项目,我无法使用C 11功能(例如decltype),因为编译器还不支持它们.我需要能够提供当前类作为模板参数,最好在没有参数的宏中(见下文),而不用打包类声明或隐藏大括号等. class Foo: private BarFoo { MAGIC //expands to using BarFoo::Baz; and
对于这个特定的项目,我无法使用C 11功能(例如decltype),因为编译器还不支持它们.我需要能够提供当前类作为模板参数,最好在没有参数的宏中(见下文),而不用打包类声明或隐藏大括号等.
class Foo: private Bar<Foo> { MAGIC //expands to using Bar<Foo>::Baz; and some others public: void otherFunction(); //... the rest of the class }; 理想情况下,我希望这样工作非常像Qt的Q_OBJECT宏,但是没有引入另一个预编译步骤和关联的生成的类. typeid可能在运行时有用,但我的目标是在构建时完成所有这些. 如何编写MAGIC宏,以便每次不需要重复类名? 解决方法
关于什么:
template<typename T> class Base { protected: typedef Base<T> MagicBaseType; namespace Baz { } }; class Derived1 : private Base<Derived1> { using MagicBaseType::Baz; } class Derived1 : private Base<Derived2> { using MagicBaseType::Baz; } 或者,如果您无法修改Base定义,则使用模板和多重继承 template<typename T> class Base { protected: namespace Baz { } }; template<typename T> class DerivedTemplate : public T { protected: typedef typename T BaseType; } class Derived : public Base<Derived>,public DerivedTemplate<Base<Derived>> { using BaseType::Baz; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |