参考创建与对象创建的主要区别是什么?

时间:2011-04-26 10:42:39

标签: c++ object map reference boost-extension

前一段时间我正在玩Boost.Extension示例。 They used

  std::map<std::string, factory<computer> > computers;
  computers.swap(types.get());

但是当我开始移植项目from bjam to premake to visual studio project 2008时,我发现我无法使用他们用于创建地图的方法。我总是在那一行得到Compiler Error C2512(实际上在line 74 inside Boost.Extension type_map.hpp上)。所以I used way of creating a link to a map

map<string, factory<computer> >& computers(types.get());

(他们在some of there tutorials中使用)并且全部编译完毕。我对C ++很陌生,可能不会得到很多。

那么从链接创建地图与简单创建地图之间的区别是什么,在这种情况下和一般情况下呢?

更新 - 完整的错误消息

  

错误1错误C2512:   提高::扩展:: basic_type_map :: type_map_convertible :: type_holder:   没有合适的默认构造函数   可用c:\ users \ avesta \ downloads \ extension -svn-source \ boost \ extension \ type_map.hpp 74 Mltiple-Inheritance

1 个答案:

答案 0 :(得分:3)

不同之处在于第二种情况根本没有创建地图;它创建了对已存在的地图的引用。 types包含一张地图,types.get()会返回对该地图的引用,您可以使用该地图初始化自己的引用。如果使用该引用修改地图,则表示您正在修改types中包含的地图。

第一种情况确实会创建一个空地图;然后将其与types中包含的(可能是非空的)地图交换,之后将types留空。这将需要来自各个班级的更多支持;有些可能需要默认可构造,可交换,并且可能是可复制和/或可分配的。错误代码似乎表明其中一个类需要一个公共默认构造函数,但没有一个;如果包含整个错误消息,则可能有助于诊断问题。