【发布时间】:2011-01-27 22:21:18
【问题描述】:
在标准库或 Boost 中,是否存在某种实用程序基类,用于使用所需的 typedef(size_type、value_type 等)填充自定义的 STL 兼容序列。我正在考虑类似boost::iterator_facade 的东西,但用于容器。
我打算自己卷起来,但想确保这样的东西不存在。
更新:
这是我想出的实用程序基类,以防有人发现它有用:
template <class C>
class ContainerAdapter
{
public:
typedef C::value_type value_type;
typedef C::reference reference;
typedef C::const_reference const_reference;
typedef C::const_iterator iterator;
typedef C::const_iterator const_iterator;
typedef C::difference_type difference_type;
typedef C::size_type size_type;
protected:
typedef C::container_type;
};
// Usage
class MyCustomContainer : public ContainerAdapter< std::vector<int> >
{
...
};
ContainerAdapter 只是“回显”自定义容器的底层容器的嵌套 typedef。真的没什么。
【问题讨论】:
-
人们使用 value_type 和迭代器,因为它比替代品更容易,但我通常使用 value_type& 而不是引用,例如(并且 vector
是邪恶的)。您确定提供其他嵌套类型定义对您有利吗?通常我将项目传递给函数,无论如何它们将被绑定为 const&,并且永远不会触及嵌套的 const_reference typedef。 -
@Fred:我只是担心我的容器与 BOOST_FOREACH、boost 范围、std::back_insertion_iterator 等兼容。如果我只需要提供所有 typedef 的最小子集,我想知道哪个。我想实验和发现很容易。
-
是的,但一般实用程序通常被编写为不可知的; 0x auto 非常适合。 :)
-
这个问题让我产生了另一个相关的问题:stackoverflow.com/questions/4823761
-
相关问题:stackoverflow.com/questions/1533917/c-template-macro-shortcut 我认为最好的解决方案可能是隐藏一个结构,就像该问题的答案一样,然后使用宏完成一系列 using 声明。跨度>
标签: c++ boost stl containers boilerplate