【发布时间】:2016-04-09 12:10:15
【问题描述】:
是否可以编写std::is_convertible 的可变参数版本?例如are_convertible<T1, T2, T3, T4> 将返回is_convertible<T1, T3> && is_convertible<T2, T4>。我已经考虑了几个小时,但无法提出任何合理的建议。
为了澄清,我想像这样使用它:
template <class ...Args1>
struct thing
{
template <class ...Args2>
enable_if_t<are_convertible<Args2..., Args1...>::value>
foo(Args2 &&...args){}
}
【问题讨论】:
-
如果有6个模板
(T1, T2, T3, T4, T5, T6)怎么办?似乎最好将邻居分组:is_convertible<T1, T2> && is_convertible<T3, T4> && is_convertible<T5, T6>. -
@erip 然后我需要以某种方式将两个参数包中的参数交错,这似乎同样困难。
-
为什么需要交错?
-
@erip 我用一个例子更新了我的帖子。
-
@user697683 你真的不希望
thing<A, B>(c, d, e, f)编译只是因为(D, E, F)可以转换(A, B, C)。您不能假设您的Args1...和Args2...的长度相同,因为您无法断言它们的长度相同。