如何在C中检索基类的类型?

对于这个特定的项目,我无法使用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;
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...