【发布时间】:2015-11-29 17:46:41
【问题描述】:
我经常遇到需要存储非拥有指针列表或对基类对象的引用的情况。当然可以了
#include <initializer_list>
#include <list>
class Base {};
class Derived {};
class Container {
public:
void setObjects(const std::initializer_list<const Base *> objects); // Set objects_ member
private:
std::list<const Base *> objects_; // Should store Base and Derived objects
};
使用std::reference_wrapper,我也可以使用
#include <initializer_list>
#include <list>
#include <functional> // for std::reference_wrapper
class Base {};
class Derived {};
class Container {
public:
void setObjects(const std::initializer_list<std::reference_wrapper<const Base> > objects); // Set objects_ member
private:
std::list<std::reference_wrapper<const Base> > objects_; // Should store Base and Derived objects
};
当我想表达一个对象(在我的例子中是 Container 类的实例)如果没有其他对象(Base 或 Derived 类的实例)就不能存在的事实时,我倾向于更喜欢第二种选择。但是,它对我来说感觉很冗长,而且我很少在其他代码中看到它。有什么好的理由让我更喜欢一种选择吗?
【问题讨论】:
-
第二种方法无效:
std::reference_wrapper<anything &>无效。你可能是指std::reference_wrapper<const Base>,没有&? -
是的,对不起。我将编辑我的问题。