gpt4 book ai didi

Thrift 生成结构的 C++ 大括号初始化

转载 作者:行者123 更新时间:2023-11-28 02:23:38 24 4
gpt4 key购买 nike

我正在使用带有 C++ 的 Thrift,它会生成许多具有构造函数的结构,如下所示:

struct ThriftColor
{
ThriftColor(const ThriftColor&);
ThriftColor& operator=(const ThriftColor&);
ThriftColor() : color((ZColor::type)0), duration(0) { }

ZColor::type color;
int32_t duration;
};

我还没弄清楚如何支撑初始化它。

我得到的错误是:

error: could not convert '{RED, 1000}' from '<brace-enclosed initializer list>' to 'ThriftColor'

或者当使用 vector 时:

error: could not convert '{{RED, 1000}, {GREEN, 2000}}' from '<brace-enclosed initializer list>' to 'std::vector<ThriftColor>'

类似形式的结构,工作原理:

struct TimedColor
{
TimedColor(ZColor::type c, int d) : color(c), duration(d) {}
ZColor::type color;
int duration;
};

有没有办法让 Thrift 生成一个可以用大括号初始化的结构?和/或:有没有办法支撑初始化第一个结构?

提前致谢!

完整示例: http://cpp.sh/3wgq

// Example program
#include <iostream>
#include <string>
#include <vector>

struct ZColor {
enum type {
OFF,
RED,
GREEN,
YELLOW,
BLUE,
MAGENTA,
CYAN,
WHITE
};
};


struct TimedColor
{
TimedColor(ZColor::type c, int d) : color(c), duration(d) {}
ZColor::type color;
int duration;
};

struct ThriftColor
{
ThriftColor(const ThriftColor&);
ThriftColor& operator=(const ThriftColor&);
ThriftColor() : color((ZColor::type)0), duration(0) { }

ZColor::type color;
int32_t duration;
};

template<typename T>
void Dump( std::vector<T>& vec)
{
for(typename std::vector<T>::iterator it = vec.begin(); it != vec.end(); it++)
{
std::cout << it->color << ":" << it->duration << std::endl;
}
}

void TestFunction1()
{
std::vector<TimedColor> vec;
vec.push_back(TimedColor(ZColor::RED,1000));
vec.push_back(TimedColor(ZColor::GREEN,2000));
Dump(vec);
}

void TestFunction2()
{
std::vector<TimedColor> vec = { { ZColor::RED, 1000 }, { ZColor::GREEN, 2000 } };
Dump(vec);
}

void TestFunction3()
{
// fails
ThriftColor tc = { ZColor::RED, 1000 };
std::vector<ThriftColor> vec = { { ZColor::RED, 1000 }, { ZColor::GREEN, 2000 } };
Dump(vec);
}

int main()
{
TestFunction1();
TestFunction2();
TestFunction3();
}

最佳答案

如果 ThriftColor 没有双参数构造函数,那么两个参数的初始化列表是无用的。

你能不能为此添加一个合适的构造函数

ThriftColor(ZColor::type color, int32_t duration) : color(color), duration(duration) {};

(或者是否有一些自动生成器可以消除它?不太了解 Thrift。)

关于Thrift 生成结构的 C++ 大括号初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31448310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com