2015-10-30 142 views
0

試圖找到一個(可能)預處理把戲,這將做同樣的下一個僞C++解析動態數組元素作爲參數? (可變參數)

myVariadicFun(argv[0],argv[1],argv[2],...,argv[argc]); 

的可變參數函數準備和工作的東西,只需要解析數組參數在裏面。

原因只是傳遞一個數組指針因爲IM與constexpr /元編程確實正在播放。

回答

0

隨着[Boost.Preprocessor]可以輕鬆實現相應的代碼生成的截圖描述你的需求:

#include <boost/preprocessor/repetition/enum.hpp> 

#define ARRAY_ELEMENTS(z, n, arrVar) arrVar[n] 

#define EXPAND_ARRAY(N, arrVar) \ 
    BOOST_PP_ENUM(N, ARRAY_ELEMENTS, arrVar) 

#define EXPAND_CASE(N, arrVar) \ 
    case N: cout << crawler(EXPAND_ARRAY(N, arrVar)).best_sum << endl; break 

int main(int argc, char* argv[]) { 
    char** input = &argv[1]; 
    --args; 
    switch(argc) { 
    EXPAND_CASE(1, input); 
    EXPAND_CASE(2, input); 
    EXPAND_CASE(3, input); 
    } 
} 

BOOST_PP_REPEAT_FROM_TO允許執行進一步代碼摺疊:

#include <boost/preprocessor/repetition/enum.hpp> 
#include <boost/preprocessor/repetition/repeat_from_to.hpp> 

#define ARRAY_ELEMENTS(z, n, arrVar) arrVar[n] 

#define EXPAND_ARRAY(N, arrVar) \ 
    BOOST_PP_ENUM(N, ARRAY_ELEMENTS, arrVar) 

#define EXPAND_CASE_Z(z, N, arrVar) \ 
case N: cout << crawler(EXPAND_ARRAY(N, arrVar)).best_sum << endl; break; 

// actually each OS has its own limitation for maximal number of arguments, see your 
// OS docs for more info. Beware Boost.Preprocessor has its own limits for repeatable 
// macros expansions 
#define MAX_ARGS 100 

int main(int argc, char* argv[]) { 
    char** input = &argv[1]; 
    --args; 
    switch(argc) { 
    BOOST_PP_REPEAT_FROM_TO(1, MAX_ARGS, EXPAND_CASE_Z, input); 
    } 
} 

但老實說我懷疑variadic模板函數是用於這種方式。

+0

我的確和constexpr一起工作,當然我使用遞歸尾巴,如果你知道一個,你能告訴我一種解析預處理器中數組元素的方法嗎?其他人不滿意。 –

+0

嗯請問[variadic預處理器宏](https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html)?對於具有不同數量參數的宏,您可以考慮[this](http://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments) – user3159253

+0

不錯,但不幸的是,這不是我搜索的。 我尋找像#define moo(array,n)array [0],array [1],... array [n] –

0

否,根據定義不能使用一個動態尺寸陣列(即,其大小在執行所定義的)與編譯時間大小扣除。

+0

錯誤。 POC here :(在bool met_end_char之前忘了'!') http://i.imgur.com/XsWCu0v.jpg http://i.imgur.com/LJUIM3e.jpg –

+0

@ArtyMcLabin你用來演繹的尺寸編譯時的大小不是數組的大小,而是編譯時提供的值。 – Johan

+0

您可能已經注意到,運行時用戶輸入重定向流量控制。這是一個簡單的概念證明,但它表明運行時CAN控制編譯計算表的輸出。看看我目前的狀態。 http://prntscr.com/8x6nq5完全正常工作。只是大量的手動副本工作,我可以用宏代替。 –