keb*_*ebs 8 c++ vector wrapper stdvector
考虑第三方库中的一个自由函数,它需要一个std::vectoras参数:void foo( std::vector<sometype>& );
现在,我在这个类型周围编写一个包装器,这样我就可以添加成员函数了.为了能够使用foo()该类型,我添加了一个访问功能.
class Wrapper
{
private:
std::vector<sometype> _data;
public:
std::vector<sometype>& data() { return _data; }
const std::vector<sometype>& data() const { return _data; }
//... other stuff
};
Run Code Online (Sandbox Code Playgroud)
这样,我仍然可以使用foo():
Wrapper a;
foo( a.data() );
Run Code Online (Sandbox Code Playgroud)
但现在考虑另一个函数,它需要一个矢量向量sometype(编辑:并将元素添加到该向量中):
void bar( std::vector<std::vector<sometype>>& );
Run Code Online (Sandbox Code Playgroud)
但我的数据类型是 std::vector<Wrapper> vec;
有没有办法使用我的包装类型来调用bar()?
我想要做的是:
std::vector<Wrapper> vec;
bar( ??? );
Run Code Online (Sandbox Code Playgroud)
我想避免的一点是先调用bar()所需的类型,然后逐个将元素复制到我的中vector<Wrapper>.
起初,我会说"不",但也许有一些聪明的解决方案?
编辑2:举个例子,考虑以下玩具实现bar()的introot数据类型:
void bar( std::vector<std::vector<int>>& vv )
{
std::vector<int> v1 = { 1,2,3 };
std::vector<int> v2 = { 4,5,6 };
vv.push_back(v1);
vv.push_back(v2);
}
Run Code Online (Sandbox Code Playgroud)
小智 1
代替 std::vector<Wrapper> vec;
使用
std::vector< std::vector<sometype> > vec;
Run Code Online (Sandbox Code Playgroud)
无论如何,您可以将 Wrapper 对象插入 vec
vec.push_back(a.data());
Run Code Online (Sandbox Code Playgroud)
然后打电话 bar(vec);
| 归档时间: |
|
| 查看次数: |
2558 次 |
| 最近记录: |