代码之家  ›  专栏  ›  技术社区  ›  user541686

我应该如何使分配器可重新绑定?我可以在保持其字段保密的情况下执行此操作吗?

  •  2
  • user541686  · 技术社区  · 8 年前

    长话短说,问题是:

    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?
    };
    


    2 回复  |  直到 8 年前
        1
  •  3
  •   songyuanyao    8 年前

    在模板复制构造函数中, alloc<T> alloc<U> 类型不同,意味着您无法访问的私有成员 分配<U(>); 在这里

    分配<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
    };
    
        2
  •  1
  •   user541686    8 年前

    我自己的猜测是,这是不可能的,您应该使用转换运算符:

    template<class U>
    operator alloc<U>() const { return alloc<U>(this->foo); }
    

    但我希望有更好的答案。。。