如何创建同时具有默认类型参数和可变参数类型参数的模板?或任何解决办法

问题描述 投票:0回答:1

我创建了一个特征结构

FnOnArg
来看看Fn是否可以调用Arg

template<typename Fn, typename Arg, typename=void>
struct FnOnArg: std::false_type {};

template<typename Fn, typename Arg>
struct FnOnArg<Fn, Arg, std::void_t<decltype(std::declval<Fn>()(std::declval<Arg>()))>>: std::true_type {};

它只能作用于带有一个参数的 Fn 我想创建

FnOnArgs

template<typename Fn, typename... Args, typename=void>
struct FnOnArgs;

但是可变参数和默认模板参数都应该是最后一个参数 有什么解决方法可以实现

FnOnArgs
吗?

c++ variadic-templates type-traits
1个回答
0
投票

您将虚拟模板参数

typename = void
移动到
typename... Args
之前的某个位置。

这意味着它不能再具有默认参数 (

= void
),因此您将其删除并显式传递
void

然后您创建另一个模板来包装此模板并自动添加

void
,这样您就不必每次都传递它。

© www.soinside.com 2019 - 2024. All rights reserved.