#include <iostream>
#include<vector>
using namespace std;
template <class T> class vector_inserter{
public:
std::vector<T> v;
vector_inserter(std::vector<T>& v):v(v){}
vector_inserter& operator,(const T& val){v.push_back(val);return *this;}
};
template <class T> vector_inserter<T> operator+=(std::vector<T>& v,const T& x)
{
return vector_inserter<T>(v),x;
}
int main()
{
vector_inserter<int> t+=1,2,3,
}
我在堆栈溢出时遇到了这个代码,我仍然试图理解它是如何工作的,我尝试编译上面的代码但是我得到错误,因为预期的初始化程序是+ =
有没有什么好方法可以为{},(),+ =等向量操作重载运算符?
答案 0 :(得分:0)
Boost Assign是Boost的少数部分之一,我认为它几乎已经过时(参见Which Boost features overlap with C++11?)
首先,这里修复了一个(更多)更通用的代码版本:
<强> Live On Coliru 强>
#include <iostream>
#include <vector>
#include <list>
#include <map>
template <class C> struct inserter {
C& c;
template <typename T>
inserter& operator,(const T& val){ c.insert(c.end(), val); return *this; }
};
template <typename C, typename V = typename C::value_type> inserter<C> operator+=(C& c, const V& x) {
return inserter<C>{c}, x;
}
int main()
{
std::vector<int> t;
t += 1,2,3;
std::list<int> l;
l += 1,2,3;
std::map<int, std::string> m;
m += std::make_pair(1, "one"), std::make_pair(2, "two"), std::make_pair(3, "three");
}
请注意它是如何适用于其他类型的。
以下是您在/ just / c ++ 11中编写类似内容的方式:
std::vector<int> t {4,5,6};
t.insert(t.end(), {1,2,3});
t.assign({1,2,3});