Tôi đang cố gắng truy cập nội dung của một biến thể. Tôi không biết những gì trong đó, nhưng may mắn thay, biến thể này. Vì vậy, tôi nghĩ rằng tôi sẽ chỉ hỏi biến thể nó là chỉ mục nào và sau đó sử dụng chỉ mục đó cho std::get
nội dung của nó.
Nhưng điều này không biên dịch:
#include <variant>
int main()
{
std::variant<int, float, char> var { 42.0F };
const std::size_t idx = var.index();
auto res = std::get<idx>(var);
return 0;
}
Lỗi xảy ra trong std::get
cuộc gọi:
error: no matching function for call to ‘get<idx>(std::variant<int, float, char>&)’
auto res = std::get<idx>(var);
^
In file included from /usr/include/c++/8/variant:37,
from main.cpp:1:
/usr/include/c++/8/utility:216:5: note: candidate: ‘template<long unsigned int _Int, class _Tp1, class _Tp2> constexpr typename std::tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& std::get(std::pair<_Tp1, _Tp2>&)’
get(std::pair<_Tp1, _Tp2>& __in) noexcept
^~~
/usr/include/c++/8/utility:216:5: note: template argument deduction/substitution failed:
main.cpp:9:31: error: the value of ‘idx’ is not usable in a constant expression
auto res = std::get<idx>(var);
^
main.cpp:7:15: note: ‘std::size_t idx’ is not const
std::size_t idx = var.index();
^~~
Làm thế nào tôi có thể sửa lỗi này?