试图找到一个(可能)预处理把戏,这将做同样的下一个伪C++解析动态数组元素作为参数? (可变参数)
myVariadicFun(argv[0],argv[1],argv[2],...,argv[argc]);
的可变参数函数准备和工作的东西,只需要解析数组参数在里面。
原因为不只是传递一个数组指针是因为IM与constexpr /元编程确实正在播放。
试图找到一个(可能)预处理把戏,这将做同样的下一个伪C++解析动态数组元素作为参数? (可变参数)
myVariadicFun(argv[0],argv[1],argv[2],...,argv[argc]);
的可变参数函数准备和工作的东西,只需要解析数组参数在里面。
原因为不只是传递一个数组指针是因为IM与constexpr /元编程确实正在播放。
随着[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模板函数是用于这种方式。
否,根据定义不能使用一个动态尺寸阵列(即,其大小在执行所定义的)与编译时间大小扣除。
错误。 POC here :(在bool met_end_char之前忘了'!') http://i.imgur.com/XsWCu0v.jpg http://i.imgur.com/LJUIM3e.jpg –
@ArtyMcLabin你用来演绎的尺寸编译时的大小不是数组的大小,而是编译时提供的值。 – Johan
您可能已经注意到,运行时用户输入重定向流量控制。这是一个简单的概念证明,但它表明运行时CAN控制编译计算表的输出。看看我目前的状态。 http://prntscr.com/8x6nq5完全正常工作。只是大量的手动副本工作,我可以用宏代替。 –
我的确和constexpr一起工作,当然我使用递归尾巴,如果你知道一个,你能告诉我一种解析预处理器中数组元素的方法吗?其他人不满意。 –
嗯请问[variadic预处理器宏](https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html)?对于具有不同数量参数的宏,您可以考虑[this](http://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments) – user3159253
不错,但不幸的是,这不是我搜索的。 我寻找像#define moo(array,n)array [0],array [1],... array [n] –