我创建了一个特征结构
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
吗?
您将虚拟模板参数
typename = void
移动到 typename... Args
之前的某个位置。
这意味着它不能再具有默认参数 (
= void
),因此您将其删除并显式传递 void
。
然后您创建另一个模板来包装此模板并自动添加
void
,这样您就不必每次都传递它。