2013-03-03 34 views
0

我需要一個在編譯時的字符串容器,它應該在運行時迭代。但是,我真的需要一個宏,以便生成一些函數(無法想象在命名空間級別使用模板化代碼的方式)。預處理器:在編譯時存儲字符串數組

但在下面的代碼中,我得到'錯誤:'序列'在類LaLaLa'沒有命名類型',這發生在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"} 
+0

那麼,你看看你的代碼在預處理器完成替換後的樣子嗎? – us2012 2013-03-03 11:35:53

+0

哦,不,沒有想到 - 我該怎麼做? – user2081073 2013-03-03 11:38:09

+1

'g ++ -E file.cpp'如果你使用gcc。 – us2012 2013-03-03 11:39:00

回答

0

問題不預處理器 - 採用直接序列後的類定義的問題。 (需要在一個函數或類似的東西內完成)