【问题标题】:preprocessor macro to make set of numbers预处理器宏来制作一组数字
【发布时间】:2015-12-18 20:24:38
【问题描述】:

我想创建一个宏来创建一个指向无序集的共享指针。

#include <memory>
#include <unordered_set>

#define MAKE_SET (x) make_shared<type_raw_set>(type_raw_set{x});

using std::make_shared;
using std::shared_ptr;
using std::unordered_set;

typedef const unordered_set<unsigned> type_raw_set;
typedef shared_ptr<type_raw_set> type_set;

type_set Snake = MAKE_SET(1,5,9,12,14,16,19,23,27,30,32,34) // does not compile

我该如何进行这项工作?

【问题讨论】:

    标签: c++11 macros preprocessor


    【解决方案1】:

    将可变数量的参数传递给宏需要使用可变参数宏:

    #define MAKE_SET(...) \
      make_shared<type_raw_set>(type_raw_set{__VA_ARGS__});
    

    【讨论】:

    • 感谢工作,但不需要双括号,因为type_raw_set{} 是提供给 make_shared 的临时对象。
    • 嗯,我隐约记得支撑初始化的工作方式不同。但话说回来,我平时的工作还没有给我足够新的编译器来使用它,而且它确实在本地工作,所以很明显我错了。 :-) 将更新答案以减少未来读者的困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2012-05-27
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2014-10-01
    • 2015-04-15
    相关资源
    最近更新 更多