小编Cos*_*smo的帖子

计算可变参数模板元组中的 std::可选类型

我在某些函数特征结构中保存了一个参数包作为元组。我如何才能知道其中有多少参数是 std::Optional 类型?

我尝试编写一个函数来使用折叠表达式检查每个参数,但这不起作用,因为我只传递一个模板类型,即元组本身。

void foo1(){}
void foo2(int,float){}
void foo3(int, std::optional<int>, float, std::optional<int>){}
void foo4(int, std::optional<int>, bool){}

template<typename R, typename... TArgs>
struct ftraits<R(TArgs...)>
{
    using ret = R;
    using args = std::tuple<TArgs...>;
};

template<typename T>
struct is_optional : std::false_type
{
};

template<typename T>
struct is_optional<std::optional<T>> : std::true_type
{
};

template<typename... Ts>
constexpr auto optional_count() -> std::size_t
{
    // doesn't work since Ts is a single parameter with std::tuple<...>
    return (0 + ... + (is_optional<Ts>::value ? 1 : 0));
}

int …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++17 variadic-tuple-types

4
推荐指数
1
解决办法
341
查看次数