gpt4 book ai didi

c++ - 有没有更短的写法 `StringPtr ? StringPtr : "null"`?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:58 24 4
gpt4 key购买 nike

我有这个代码:

 std::wstringstream outstream;
outstream << (prop.m_pwszOriginalVolumeName
? prop.m_pwszOriginalVolumeName
: L"null") << L";"
<< (prop.m_pwszSnapshotDeviceObject
? prop.m_pwszSnapshotDeviceObject
: L"null") << L";"
<< (prop.m_pwszOriginatingMachine
? prop.m_pwszOriginatingMachine
: L"null") << L";"
<< ... // some more strings here

有没有办法既避免代码重复,又保持代码简洁?

最佳答案

你可以定义一个小函数:

whatever_t strOrNull(whatever_t str) {
return str ? str : L"null";
}

那么你的代码就变成了

std::wstringstream outstream;
outstream << strOrNull(prop.m_pwszOriginalVolumeName) << L";"
<< strOrNull(prop.m_pwszSnapshotDeviceObject) << L";"
<< strOrNull(prop.m_pwszOriginatingMachine) << L";"
<< ... // some more strings here

或者如果你想更简洁,你可以这样做(取决于 whatever_t 是什么;如果 wstringstream 已经有该类型的 operator<< 重载,这将不起作用):

wstringstream& operator<<(wstringstream& out, whatever_t str) {
if (str)
out << str;
else
out << L"null";

return out;
}

那么你的代码就变成了

std::wstringstream outstream;
outstream << prop.m_pwszOriginalVolumeName << L";"
<< prop.m_pwszSnapshotDeviceObject << L";"
<< prop.m_pwszOriginatingMachine << L";"
<< ... // some more strings here

关于c++ - 有没有更短的写法 `StringPtr ? StringPtr : "null"`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083830/

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