我有一个自定义类,它的行为基本上像set
,但是我需要添加一些功能。我不知道此建议是否适用于布景,但在reading关于最好不要继承自std::vector
更好的方式之后,我决定放心使用它,并且只将set
设为私人我类中的成员变量,并通过适当的操作。但是,当我像使用insert
一样需要定义std::inserter
方法think时,会出现错误。此外,我不能重载该方法,不允许提供insert
所采用的多种形式。我无法从make解密输出消息。
示例代码:
#include <cstdio>
#include <set>
#include <algorithm>
class Test {
public:
Test() {};
Test(const std::set<int>& inset) {
set_ = inset;
};
std::set<int>::const_iterator begin() const {return set_.begin();};
std::set<int>::const_iterator end() const {return set_.end();};
std::set<int>::iterator insert(std::set<int>::iterator hint, const int& value) {
return set_.insert(hint, value);
};
private:
std::set<int> set_;
};
int main(int argc, char **argv) {
Test a = std::set<int>({1, 2, 3, 4, 4, 4, 5, 5});
Test b = std::set<int>({ 2, 3, 5});
Test c;
std::set_difference(a.begin(), a.end(), b.begin(), b.end(),
std::inserter(c));
return 0;
}
根据cppreference列出的原型,我尝试了insert
的各种版本。
set.cc: In function ‘int main(int, char**)’:
set.cc:31:28: error: no matching function for call to ‘inserter(Test&)’
std::inserter(c));
^
set.cc:31:28: note: candidate is:
In file included from /usr/include/c++/4.8.2/bits/stl_algobase.h:67:0,
from /usr/include/c++/4.8.2/bits/stl_tree.h:61,
from /usr/include/c++/4.8.2/set:60,
from set.cc:2:
/usr/include/c++/4.8.2/bits/stl_iterator.h:683:5: note: template<class _Container, class _Iterator>
std::insert_iterator<_Container> std::inserter(_Container&, _Iterator)
inserter(_Container& __x, _Iterator __i)
^
/usr/include/c++/4.8.2/bits/stl_iterator.h:683:5: note: template argument deduction/substitution failed:
set.cc:31:28: note: candidate expects 2 arguments, 1 provided
std::inserter(c));
^