我有一个结构
typedef struct MyStruct
{
double x, y, z;
}MyStruct;
我有一个功能
template <class Iterator>
bool
SomeFunc (
Iterator& anotherVecBegin
)
{
...
}
这就是我调用函数的方式。
std::vector<MyStruct> mySt;
SomeFunc(mySt.begin());
我收到错误invalid initialization of non-const reference of type..
这对我来说似乎很明显,因为参数将一直存在于函数的生命周期中。
如果我使参考不变,整个目的将被杀死,因为我无法在向量中插入值
我尝试过但失败了:
template <class Iterator>
bool
SomeFunc (
const Iterator& anotherVecBegin
)
{
MyStruct pt1;
pt1.x = 10, pt1.y = 20, pt3.z = 30;
*(anotherVecBegin)++ = pt1;
}
这对我也有意义。
但我正在寻找一种方法:
pl建议
答案 0 :(得分:3)
我解决了这个问题。我不需要引用迭代器。
相反,我只使用了back_inserter
从callee方法,我做:
std::vector<MyStruct> mySt;
SomeFunc(std::back_inserter(mySt));
std::cout << "Struct size after insert: " << mySt.size() << std::endl;
然后功能变为:
template <class BackInsertIterator>
bool
SomeFunc (
const BackInsertIterator anotherVecBegin
)
{
MyStruct pt1;
pt1.x = 10, pt1.y = 20, pt3.z = 30;
*(anotherVecBegin)++ = pt1;
// ... remaining code
}