在我的代码中,有时我需要从另一个容器构造一个容器。但是这些容器对象是不同类型的,所以我不能使用复制构造函数。我所做的看起来像这样(C++11,我使用统一初始化和构造函数委托):
std::vector<int> source {1, 3, 5, 7, 9};
std::list<int> destination (source.begin (), source.end ());
我意识到 std::list 可以有一个这样的构造函数,让事情变得更漂亮:
template </* ... */>
class list
{
public:
template <class Container> list (const Container& container)
: list (container.begin (), container.end ())
{
}
/* ... */
};
不幸的是,我只能为我自己的课程这样做,而不是为 STL 课程。所以第一个问题,STL 和 Boost 中不存在这样的构造函数是有原因的吗?第二个问题,是否有一种安全的方法来为 STL 容器实现这样的 ctor,也许通过以某种方式定义转换运算符?
这个问题当然只是一个方便的问题,对代码或程序行为无关紧要。但它可以使代码看起来更具可读性:
std::vector<int> source {1, 3, 5, 7, 9};
std::list<int> destination = source;