当返回值被模板化时,我想返回一个聚合初始值设定项:
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
编译的演示。