受保护的做作运营商和公共复制者

时间:2014-04-22 08:20:13

标签: c++ copy

首先

课程的可能原因是:

  • operator =受保护
  • copy-ctor public?

其次

考虑以下设计:

class WeirdDesign
{
  public :
    WeirdDesign(const WeirdDesign& ){}

  protected:
    WeirdDesign& operator=(const WeirdDesign&){}
};

struct A
{
  typedef std::vector<WeirdDesign> mytype;

  void method(const mytype& elements)
  {
    // access to elements
  }
};

class B
{ 
   void inserter()
   {
      std::unordered_map < std::string,  A::mytype > mymap;
      mymap.insert(std::make_pair("0", A::mytype())); //fail at linking

      A().method(mymap.find("0")->second);
   }
};

当我尝试在B::mymap_中插入元素时,链接器无法解析operator=的{​​{1}}?为什么?

1 个答案:

答案 0 :(得分:0)

标准容器的某些操作要求值类型为CopyAssignable。 std :: vector的这种操作的一个例子是成员函数insert

同样适用于标准关联容器。在第23.2.4节的第7节中,C ++标准的关联容器有注释

  

[注意:例如,在某些情况下,key_type和mapped_type是   即使关联的value_type,也需要是CopyAssignable,   对,不是CopyAssignable。 - 后注]