繁体   English   中英

定义一个 function 以返回指定类型的 std::variant c++

[英]define a function to return specified type of std::variant c++

我对使用 c++17 规则几乎是新手。 我的问题很简单; 如何以我定义它们的相同顺序访问 std::variant 类型? 我知道下面的代码不起作用!

#include <variant>
#include <iostream>

using myVariant = std::variant<double, int, std::string>;

template<typename T>
T   typeReturn(int i);

int main(void)
{
    myVariant b = 1.2;

    double c = typeReturn(1)(b);

    std::cout << c << std::endl;

    return 0;
}

template<typename T>
T typeReturn(int i)
{
    if (i == 0) return std::get<double>;
    else if (i == 1) return std::get<int>;
    else if (i == 2) return std::get<std::string>;
    else return std::get<int>;
}

如何以我定义它们的相同顺序访问 std::variant 类型?

无需自己编写 - std::get已经这样做了 只是:

double c = std::get<0>(b);

不确定,但我想您正在寻找以下内容

#include <variant>
#include <iostream>

using myVariant = std::variant<double, int, std::string>;

template <std::size_t I>
auto typeReturn (myVariant const & v)
 {
        if constexpr ( I == 0 ) return std::get<double>(v);
   else if constexpr ( I == 1 ) return std::get<int>(v);
   else if constexpr ( I == 2 ) return std::get<std::string>(v);
   else                         return std::get<int>(v);
}

int main ()
 {
   myVariant b = 1.2;

   double c = typeReturn<0u>(b);

   std::cout << c << std::endl;
 }

请注意,您需要使用if constexpr并将索引作为模板参数传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM