gpt4 book ai didi

c++ - 使用没有默认构造函数的常量字段初始化结构数组

转载 作者:行者123 更新时间:2023-11-28 04:55:31 25 4
gpt4 key购买 nike

我想定义一个结构数组,但这不起作用,因为它有一个没有默认构造函数的常量字段。

Struct 是 SDK 的一部分,如下所示:

struct SParametricParamDef
{
const TXString fUniversalName;
SResString fLocalizedName;
const TXString fDefaultImperial;
const TXString fDefaultMetric;
EFieldStyle fFieldStyle;
short fChoicesChcID;
};

TXString 没有默认构造函数。所以以下是失败的:

SParametricParamDef *arrParams = new SParametricParamDef[size]; // <= throws compile time exception
for (int i = 0; i < size; i++)
{
arrParams[i] = params[i].def; // <= also throws an exception, because operator = is not available
}

有什么办法可以解决吗?结果我需要一个 SParametricParamDef*,因为这个数组在 SDK 中再次使用...

信息

在旧的 SDK 版本中,const TXSTringconst char* 并且当时我没有遇到问题......现在我需要调整我的代码以使用新结构...

最佳答案

您得到的错误主要不是关于operator =,而是关于您默认构造了一个包含const 成员的对象这一事实。这将使它们变得不可变,并且在循环中尝试修改它们的任何尝试都必须失败。幸运的是,您可以使用 emplace_back在 vector 内部初始化 SParametricParamDef 对象,而不采用间接的默认构造和赋值:

std::vector<SParametricParamDef> arrParams;
for(std::size_t n = 0; n < size; ++n) {
arrParams.emplace_back(params[n].def);
}

这应该最大限度地减少复制量,并且无需修改 struct 定义。

关于c++ - 使用没有默认构造函数的常量字段初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47217524/

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