MM.*_*MM. 16 c++ enums nested forward-declaration
我有类似以下代码:
class B
{
}
class A
{
enum {
EOne,
ETwo
} EMyEnum;
B myB;
}
Run Code Online (Sandbox Code Playgroud)
我想在类B中声明一个类型为EMyEnum的成员(在A之前声明).这可能吗?我意识到解决方案是将B类声明为秒,但为了清楚起见,我宁愿不这样做.
Mat*_* M. 11
这是不可能的......但它可以伪造继承滥用:)
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;
};
Run Code Online (Sandbox Code Playgroud)
另一方面......你为什么不简单地向前宣布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 };
Run Code Online (Sandbox Code Playgroud)
当然你需要实际编写A的所有通常的"默认生成"方法,但是嘿,这不会花费太多!
| 归档时间: |
|
| 查看次数: |
8445 次 |
| 最近记录: |