如何将聚合初始值设定项作为模板化结构返回

  • 本文关键字:返回 结构 c++
  • 更新时间 :
  • 英文 :


当返回值被模板化时,我想返回一个聚合初始值设定项:

Msg {
std::string msgId;
std::string data; 
};
template <typename T> 
struct RetVal {
int code;
std::optional<T> msg;
};

RetVal<Msg> fn1() {
Msg msg{.msgId = "123", .data = "my data"}; // C99 Designator initialization
return { 200, msg };
}
RetVal<Msg> fn2() {
Msg msg{.msgId = "456", .data = "my other data"}; // C99 Designator initialization
return { 200, msg };
}

MSVC编译器输出:

"返回":无法从"初始值设定项列表"转换为RetValMSVC(C2440(

顺便说一句。。。我可以返回一些未定义的字段吗?如下所示:

示例1:

return {, resp};

示例2:

return {code, };

有可能吗?

我的编译器是最新的MSVC 19.27。

您的代码在c++20中是有效的,应该由一致的编译器编译。


是的,您可以返回一个缺少某些字段的Retval<Msg>,如下所示:

return { .code = 200 };
// or  
return { .msg = msg };

下面是一个使用/std:c++latest编译的演示。

最新更新