相关疑难解决方法(0)

使用带递归的std :: variant,而不使用boost :: recursive_wrapper

我想boost::variant用C++ 17 替换s std::variant并摆脱boost::recursive_wrapper,在下面的代码中完全消除对boost的依赖.我该怎么办?

#include <boost/variant.hpp>
#include <type_traits>

using v = boost::variant<int, boost::recursive_wrapper<struct s> >;
struct s
{
    v val;
};

template<template <typename...> class R, typename T, typename ... Ts>
auto reduce(T t, Ts ... /*ts*/)
{
    return R<T, Ts...>{t};
}

template<typename T, typename F>
T adapt(F f)
{
    static_assert(std::is_convertible_v<F, T>, "");
    return f;
}

int main()
{
    int  val1 = 42;
    s    val2;
    auto val3 = adapt<v>(reduce<boost::variant>(val1, val2));
}
Run Code Online (Sandbox Code Playgroud)

有两个通用函数:第一个函数reduce在运行时选择返回哪个参数(这里它只返回第一个参数以便简洁),第二个函数adapt将类型F的值转换为类型T的值. …

c++ boost c++17

21
推荐指数
1
解决办法
4298
查看次数

标签 统计

boost ×1

c++ ×1

c++17 ×1