我需要几个标准的整数集,才能从多个转换单元访问这些整数。目标是采用这些标准集,并根据代码的上下文将它们放入本地集。

例如,我拥有的最佳解决方案是:

#include <boost/assign/list_of.hpp>
#include <set>

const std::set<int> set9 =
    boost::assign::list_of(4)(10)(108);

const std::set<int> set10 =
    boost::assign::list_of(3)(5)(10)(108);

const std::set<int> set11 =
    boost::assign::list_of(2)(3)(5)(101);

int main(void)
{
    std::set<int> my_set(set9);
    my_set.insert(set11.begin(), set11.end());

    return 0;
}

它们不需要是恒定的全局变量,实际上,我可能更喜欢函数,但是如果它们是函数,那么每次我要使用多个函数时,都必须添加额外的一行和额外的set变量。

看起来像这样(设置了比以前更多的标准):
    std::set<int> my_set(get_set9());
    std::set<int> extra_line(get_set11());
    my_set.insert(extra_line.begin(), extra_line.end());
    std::set<int> another_extra_line(get_set12());
    my_set.insert(another_extra_line.begin(), another_extra_line.end());

除非我缺少什么?

我偏爱功能的原因是存在额外的复杂性。在常量集中,有重复的值具有关联的含义,因此,我不想在每次更改时都重复它们(并防止代码重复)。

在我之前的示例中,说10和108连接在一起,应该总是一起出现。如果这些是函数,我可以让get_set11()和get_set12()调用一个通用函数(例如get_set2()仅有10和108)。但是,使用常量集方法时,我不确定如何构建包含其他集的这些常量集。我想出的最好的是:
#include <boost/assign/list_of.hpp>
#include <set>

#define APPLY_COMMON_SET(prev) \
    prev(10)(8)

const std::set<int> set2 =
     APPLY_COMMON_SET(boost::assign::list_of);

const std::set<int> set9 =
     APPLY_COMMON_SET(boost::assign::list_of(4));

const std::set<int> set10 =
     APPLY_COMMON_SET(boost::assign::list_of(3)(5));

const std::set<int> set11 =
    boost::assign::list_of(2)(3)(5)(101);

#undef APPLY_COMMON_SET

int main(void)
{
    std::set<int> my_set(set9);
    my_set.insert(set11.begin(), set11.end());

    return 0;
}

哪个可行,但我希望避免使用预处理器宏。

这不会编译,但我希望能够执行以下操作:
const std::set<int> set2 =
    boost::assign::list_of(10)(108)

const std::set<int> set9 =
    boost::assign::list_of(4) + set2;

const std::set<int> set10 =
    boost::assign::list_of(3)(5) + set2;

有没有宏的方法吗?还是我唯一的选择?

最佳答案

是否有任何特定的性能限制?您可以只实现最后使用的添加:

typedef std::set<int> intset;

intset onion(intset lhscp, const intset &rhs) {
    lhscp.insert(rhs.begin(), rhs.end());
    return lhscp;
}

const intset set10 = onion(boost::assign::list_of(2)(5), set2);

10-01 06:38