在C ++ 98中初始化结构数组的优雅方法

蒙齐

我使用的是gcc版本4.9.2,如果我使用编译器标志-std = c ++ 0x进行编译,则以下代码将编译正常。

#include <iostream>
#include <vector>

using namespace std;
typedef struct
{
    vector<int> a;
    int b;
} MYTYPE;

int main(void)
{
    MYTYPE test[]=
    {
        { {1,2,3},4},
        { {5,6},7},
        { {},8}
    };
}

如果删除-std = c ++ 0x标志,则编译器将报告:

错误:无法将'{1、2、3}'从'转换为'std :: vector'

什么是初始化test []的优雅方法?

YSC

使用C ++ 98,最好的方法可能是定义和使用辅助函数:

struct Data
{
    std::vector<int> vector;
    int scalar;
};

template<std::size_t N>
Data make_data(const int (&vector)[N], int scalar)
{
    Data result;
    result.vector.assign(vector, vector+N);
    result.scalar = scalar;
    return result;
}

int main()
{
    const int vector[] = {1,2,3}; // just to annoy people using namespace std :)
    Data d = make_data(vector, 4);
    std::cout << d.vector[2] << "\n" << d.scalar << "\n";
}

现场演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章