将句法分配到过载 =以初始化向量并添加值

Boost ASSIGN syntact to overload += to initialize vectors and add values

本文关键字:向量 初始化 添加 分配 句法      更新时间:2023-10-16
#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,
}

我在堆栈溢出中遇到了此代码,我仍在尝试了解它的工作原理,我尝试编译上述代码,但我会根据预期的initializer be =

获得错误

有什么好方法可以使矢量操作过载操作员,例如{},(), =?

提升分配是我真正考虑过时的几个Boost的部分之一(请参阅哪些Boost功能与C 11重叠?)

首先,这是您已修复的代码的(多)一般版本:

活在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});