我有一个容器,一个类,我想为它提供类似STL的方法。
class myclass {
public:
//...
template < typename InputIterator >
void assign(InputIterator first, InputIterator last);
// ...
private:
// ...
std::vector<int> mystlcont;
// ...
};
template < typename InputIterator >
myclass::assign(InputIterator first, InputIterator last) {
this->mystlcont.clear();
this->mystlcont.assign(first, last);
}
确定。好吧,我编译,好吧。 我现在用它了......
myclass m;
std::vector<int> vect;
vect.push_back(1);
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vect.push_back(5);
vect.push_back(8);
vect.push_back(13);
m.assign(vect.begin(), vect.end()); // Line X
在第X行调用函数时,编译器会返回一个非常难看的错误。
workflow_test.hpp:在函数'void中 中间件:: WorkflowSerializationTest()”: workflow_test.hpp:114:错误:无效 从类型演员 “__gnu_cxx :: __ normal_iterator
'输入'middleware :: TaskDescriptor *' workflow_test.hpp:114:错误:无效 从类型演员 “__gnu_cxx :: __ normal_iterator '输入'middleware :: TaskDescriptor *'
workflow_test是我调用函数assign的文件,myclass repreents工作流类在workflow.hpp和workflow.cpp中... TaskDescriptor是向量中的元素(myclass中集合中的类型)。
你知道为什么会这样吗?
我怀疑在我的类中必须有一些运算符重载才能让这个机制正常工作....因为即使我写了
也不是方法实现的问题template < typename InputIterator >
void myclass::assign(InputIterator first, InputIterator last) {
// NOTHING WRITTEN IN THE BODY
}
调用时会引发相同的“异常”。
答案 0 :(得分:1)
你所拥有的不是你自己的容器,而是容器包装器。
但我发现您的代码只有一个问题:您的myclass::assign
定义没有指定返回类型。
这段代码实际上对我有用:
#include <vector>
#include <algorithm>
#include <iostream>
class MyWrapper {
public:
template <typename InputIterator>
void assign(InputIterator first, InputIterator last);
const std::vector<int>& container() const { return container_m; }
private:
std::vector<int> container_m;
};
template <typename InputIterator>
void MyWrapper::assign(InputIterator first, InputIterator last)
{
container_m.assign(first, last);
}
template <typename T>
void print(const T& x)
{
std::cout << x << " ";
}
int main()
{
MyWrapper mw;
std::vector<int> vect;
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vect.push_back(4);
vect.push_back(5);
vect.push_back(6);
vect.push_back(7);
mw.assign(vect.begin(), vect.end());
std::for_each(mw.container().begin(), mw.container().end(), print<int>);
}
输出:
1 2 3 4 5 6 7