我有类似于以下代码的代码:
class B
{
}
class A
{
enum {
EOne,
ETwo
} EMyEnum;
B myB;
}
我想在B类(在A之前声明)声明EMyEnum类型的成员。这可能吗?
发布于 2018-05-02 13:44:40
这是不可能的...但它可以伪造继承滥用:
namespace detail
{
class A_EMyEnum
{
public:
enum {
EOne,
ETwo
} EMyEnum;
protected:
A_EMyEnum() {}
A_EMyEnum(const A_EMyEnum&) {}
A_EMyEnum& operator=(const A_EMyEnum&) { return *this; }
~A_EMyEnum() {}
}; // class A_EMyEnum
} // namespace detail
class B { // use detail::A_EMyEnum };
class A: public detail::A_EMyEnum
{
B mB;
};
另一方面...你为什么不直接转发B呢?
class B;
class A
{
public:
enum EMyEnum {};
A();
A(const A&);
A& operator=(const A&);
~A();
void swap(A&);
private:
B* mB;
};
class B { // use A::EMyEnum };
当然,你确实需要编写A的所有正常的“默认生成”方法,但是这并不需要太多的代价!
https://stackoverflow.com/questions/-100004472
复制相似问题