2015-10-30 67 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完全正常工作。只是大量的手动副本工作,我可以用宏代替。 –