PreProcessor:在编译时存储字符串数组

时间:2013-03-03 11:34:12

标签: c++ c-preprocessor

我需要在编译时使用一个字符串容器,它应该在运行时可迭代。 但是,我真的需要一个宏,因此会生成一些函数(无法想到在命名空间级别使用模板化代码来实现这一点的方法)。

但是在下面的代码中我得到'错误:'类LaLaLa'中的'sequence'没有命名类型',这在ASSIGN宏中发生(我认为)。 有人可以帮我吗?

#define CREATE_FUNCTION(r, data, i, elem) // creates a function with name 'do_something_with_##elem()'

#define ASSIGN(r, data, i, elem) data::sequence[i] = elem;

#define TO_ARRAY(name, _seq)                                          \
    BOOST_PP_SEQ_FOR_EACH(CREATE_FUNCTION, _, _seq)                   \
    class name                                                        \
    {                                                                 \
    public:                                                           \
        static constexpr std::size_t size = BOOST_PP_SEQ_SIZE(_seq);  \
        static std::string sequence[size];                            \
    };                                                                \
    BOOST_PP_SEQ_FOR_EACH_I(ASSIGN, name, _seq)


TO_ARRAY(LaLaLa, (x)(y)(z)(a))

然后我想用它这样的东西:

do_something_with_x();
do_something_with_z();
std::vector<std::string> use_strings;
for(size_t i = 0; i < LaLaLa::size; ++i)
{
   use_strings.push_back(LaLaLa::sequence[i]);
}
// use_strings == {"x", "y", "z", "a"}

1 个答案:

答案 0 :(得分:0)

问题不在于预处理器 - 在类定义之后直接使用序列是问题。 (需要在函数或类似的东西中完成)

相关问题