我应该如何使我的分配器重新绑定?我可以在保持其字段私有的同时做到这一点吗?
How am I supposed to make my allocator rebindable? Can I do it while keeping its fields private?
长话短说,问题来了:
template<class T>
struct alloc
{
template<class U>
alloc(alloc<U> const &other) : foo(other.foo) { } // ERROR: other.foo is private
template<class U> struct rebind { typedef alloc<U> other; };
private:
pool<T> *foo; // do I HAVE to expose this?
};
公开私有字段是唯一的解决方案吗?
您实际上应该如何制作转换构造函数?
我自己的猜测是这是不可能的,您应该使用转换运算符:
template<class U>
operator alloc<U>() const { return alloc<U>(this->foo); }
但我希望有更好的答案...
在模板复制构造函数中,alloc<T>
和alloc<U>
是不同的类型,意味着你不能在这里访问alloc<U>
的私有成员。
您可以结交 alloc<U>
朋友:
template<class T>
struct alloc
{
... ...
template <typename U>
friend struct alloc;
alloc(alloc<U> const &other) : foo(other.foo) {} // possible to access other.foo now
};
长话短说,问题来了:
template<class T>
struct alloc
{
template<class U>
alloc(alloc<U> const &other) : foo(other.foo) { } // ERROR: other.foo is private
template<class U> struct rebind { typedef alloc<U> other; };
private:
pool<T> *foo; // do I HAVE to expose this?
};
公开私有字段是唯一的解决方案吗?
您实际上应该如何制作转换构造函数?
我自己的猜测是这是不可能的,您应该使用转换运算符:
template<class U>
operator alloc<U>() const { return alloc<U>(this->foo); }
但我希望有更好的答案...
在模板复制构造函数中,alloc<T>
和alloc<U>
是不同的类型,意味着你不能在这里访问alloc<U>
的私有成员。
您可以结交 alloc<U>
朋友:
template<class T>
struct alloc
{
... ...
template <typename U>
friend struct alloc;
alloc(alloc<U> const &other) : foo(other.foo) {} // possible to access other.foo now
};