我有结构:
enum VAR;
typedef void (*VoidF)();
struct Function
{
const char* name;
VAR return_type;
vector<VAR> args;
VoidF f;
};
我可以在VS2013中将其初始化为:
const Function funcs[] = {
"print", V_VOID, { V_STRING }, f_print,
"pause", V_VOID, {}, f_pause,
"getstr", V_STRING, {}, f_getstr,
"getint", V_INT, {}, f_getint,
"pow", V_INT, { V_FLOAT, V_FLOAT }, f_pow,
"getfloat", V_FLOAT, {}, f_getfloat
};
但我也需要这个在VS2008中工作。有没有其他方法然后将其更改为功能并逐个推送矢量元素?我在git上有这个代码,它需要同时使用这两个版本。
VS2008不支持C ++ 11中的功能。
答案 0 :(得分:0)
在此处找到一些相关答案:What is the easiest way to initialize a std::vector with hardcoded elements?
决定这样写:
Function::Function(cstring name, VAR return_type, VoidF f, ...) : name(name), return_type(return_type), f(f)
{
va_list a;
va_start(a, f);
while(true)
{
VAR type = va_arg(a, VAR);
if(type == V_VOID)
break;
else
args.push_back(type);
}
va_end(a);
}
const Function funcs[] = {
Function("print", V_VOID, f_print, V_STRING, V_VOID),
Function("pause", V_VOID, f_pause, V_VOID),
Function("getstr", V_STRING, f_getstr, V_VOID),
Function("getint", V_INT, f_getint, V_VOID),
Function("pow", V_FLOAT, f_pow, V_FLOAT, V_FLOAT, V_VOID),
Function("getfloat", V_FLOAT, f_getfloat, V_VOID)
};