[英]Using std::experimental::optional as a parameter by reference
[英]Using std::experimental::optional giving compilation errors
我第一次使用可選功能,任何想法在此代碼中出了什么問題,我希望從存儲在retCode
的元組中檢索值
#include <iostream>
#include <experimental/optional>
std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity();
std::experimental::optional<std::tuple<uint16_t, uint32_t, uint32_t>> addEntity() {
uint32_t ipR = 1111;
uint32_t ipU = 2222;
uint16_t entityId = 0;
return std::make_tuple(entityId, ipR, ipU);
}
int main()
{
auto retCode = addEntity();
std::cout<<std::get<0>(retCode)<<std::endl;
return 0;
}
編譯錯誤
g++ experiment.cpp
In file included from /usr/include/c++/7/bits/move.h:54:0,
from /usr/include/c++/7/bits/nested_exception.h:40,
from /usr/include/c++/7/exception:143,
from /usr/include/c++/7/ios:39,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from experiment.cpp:1:
/usr/include/c++/7/type_traits: In instantiation of ‘struct std::is_trivially_destructible<std::tuple<short unsigned int, unsigned int, unsigned int> >’:
/usr/include/c++/7/experimental/optional:203:5: required from ‘class std::experimental::fundamentals_v1::optional<std::tuple<short unsigned int, unsigned int, unsigned int> >’
從optional<T>
到T
沒有隱式轉換,您需要提取值。
int main()
{
auto retCode = addEntity();
std::cout<<std::get<0>(retCode.value())<<std::endl; // can throw std::bad_optional_access
return 0;
}
除非您有其他需要 addEntity
返回可選元組的地方,而不僅是您在調用addEntity
初始化可選元組的地方,否則它應該只返回一個tuple 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.