用向量初始化struct数组

时间:2014-12-22 17:06:08

标签: c++ visual-studio-2008 struct visual-studio-2013

我有结构:

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中的功能。

1 个答案:

答案 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)
};