我所試圖做的是有一個可變大小的POD爲平普爾在我的圖書館類:C++ 11從私有嵌套類型繼承是否合法?
// header file
class foo {
public:
// ctors, copy, move, dtor, etc.
private:
struct impl; // forward-declared
impl* pimpl; // pointer to private implementation
};
然後這樣定義幾個固定大小的實現:
// .cpp implementation file
struct foo::impl {
uint32_t refs;
uint32_t size;
uint32_t len;
uint32_t data;
};
static_assert(sizeof(typename foo::impl) == 16, "paranoia");
namespace { // anonymous
typedef typename foo::impl base;
template <size_t S>
struct block : base {
static_assert(S > 16, "invalid block size");
static_assert(((S - 1) & S) == 0, "block size must be power of 2");
uint8_t pad[S - 16];
};
typedef block<64> block64;
typedef block<128> block128;
// ...
}
// foo implementation using the above PODs
版本的GCC 4.6和4.7沒有問題用-std=c++0x -Wall -pedantic
編譯,但我仍然對使用私有嵌套類型名稱的合法性感到模糊。通過我的[也許過時的草案] C++ 11標準副本涉水沒有給我更好的線索。
如果任何人都可以指出我的任何東西(最好是標準中的一節),證明這種方式或其他(合法與否),我會永遠感激。
這看起來不合法。 「impl」是私人的,爲什麼任何人都可以訪問它? –