我想将 Pimpl 成语与本地存储成语一起应用:
我的类型.h
class mytype {
struct Impl;
enum{ storage = 20; }
char m_storage[ storage ];
Impl* PImpl() { return (Impl*)m_storage; }
public:
mytype();
~mytype();
void myMethod();
};
我的类型.cpp
#include "mytype.h"
struct mytype::Impl {
int foo;
void doMethod() { foo = (foo-1)*3; };
}
mytype::mytype() {
new (PImpl()) Impl(); // placement new
//check this at compile-time
static_assert( sizeof(Impl) == mytype::storage );
//assert alignment?
}
mytype::~mytype() {
PImpl()->~();
}
void mytype::myMethod() {
PImpl()->doMethod();
}
我对这种方法唯一关心的是对齐m_storage
。char
不保证以与 int 相同的方式对齐。原子可能有更严格的对齐要求。我正在寻找比 char 数组更好的东西来声明存储,它使我能够定义(和断言)对齐值。你知道这样的事吗?也许一个boost库已经这样做了?