是否有一种标准且安全的方法来获取子构造函数初始化列表中的一个基类的地址?
这是我想做的事情:
我有多个类,它们提供一些处理缓冲区的功能(void*,长度),并且我有多个保存数据的类(c 样式结构)。我想用最少的代码向用户提供两者的结合。这是我的想法:
//Parent1 is POD (old c-style structure)
struct Parent1{/*C style stuff*/};
//Parent2 and Parent3 are NOT POD (virtual functions, copy constructors, ...)
class Parent2{public: Parent2(void*, size_t);/*stuff*/};
class Parent3{public: Parent3(void*, size_t);/*stuff*/};
/*order of inhertiance is not guranteed, it could be Parent2, Parent2, Parent3*/
struct Child1 : public Parent1, public Parent2, public Parent3
{
Child1()
: Parent2((Parent1*)this, sizeof(Parent1)),
Parent3((Parent1*)this, sizeof(Parent1))
{
}
//using self() instead of this is trick which I don't prefer to use.
const Child1* self()const{return this;}
};
这可以很好地编译 gcc,但会在 Visual Studio 上发出警告,稍后我将尝试其他嵌入式编译器。我正在寻找可以通过MISRA C++ 检查、多空间检查和任何其他静态分析工具的标准解决方案。
编辑:
Visual Studio 警告:警告 C4355: 'this' : used in base member initializer list