gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:22:16 25 4
gpt4 key购买 nike

对于这个特定项目,我无法使用 C++11 功能(例如 decltype),因为编译器尚不支持它们。我需要能够提供当前类作为模板参数,最好是在没有参数的宏中(见下文),而不需要修饰 class 声明或隐藏花括号等。

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++ - 如何在 C++ 中检索基类的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35799517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com