【问题标题】:What is main difference between creation of reference vs creation of object?创建引用与创建对象之间的主要区别是什么?
【发布时间】:2011-04-26 10:42:39
【问题描述】:

所以不久前我在玩 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: boost::extensions::basic_type_map::type_map_convertible::type_holder: 没有合适的默认构造函数 可用 c:\users\avesta\downloads\extension-svn-source\boost\extension\type_map.hpp 74 多重继承

【问题讨论】:

  • 错误信息是否告诉你哪个类缺少默认构造函数?

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


【解决方案1】:

不同的是,第二种情况根本不创建地图;它创建对已经存在的地图的引用。 types 包含一个映射,types.get() 返回对该映射的引用,您可以使用它来初始化您自己的引用。如果您使用该引用修改地图,那么您正在修改 types 中包含的地图。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2012-02-03
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多