我在编译时需要一个字符串容器,它应该在运行时是可迭代的。但是,我真的需要一个宏,以便生成一些函数(想不出用命名空间级别的模板化代码来做到这一点的方法)。
但是在下面的代码中,我得到'错误:'class 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"}