boost :: assign :: map_list_of中的奇怪函数

时间:2013-07-10 16:29:33

标签: c++ boost syntax

我发现这种结构:

std::map<T, T> a = boost::assign::map_list_of(arg11, arg12)
                                             (arg21, arg22)
                                             ;

请告诉我这里发生了什么以及如何在c ++上实现它?

1 个答案:

答案 0 :(得分:3)

我没有阅读实现,我认为你可以使用“Accumulator”对象重现它:

template<class T>
class Acc
{
public:
   Acc &operator()(T a, T b)
   {
       map.insert(std::make_pair(a, b));
   }
   operator std::map<T, T>()
   {
       return map;
   }
 private:
   std::map<T, T> map;
}

每次执行(a,b)之类的操作时,都会调用operator(),它只是在地图中添加std :: pair(a,b)。转换运算符允许获取s​​td :: map而不是Acc对象。

用途是:

std::map<int, int> = Acc<int>()(1,2)(3,4)(6,7);

Nb:代码未经过测试。