为可变参数指定一种类型
本文探讨了一种方法,以确保传递给可变参数函数或可变参数模板函数的所有参数都是相同类型,无需使用额外的数据结构,如数组、向量或结构体。
可变参数函数和模板函数
可变参数函数和可变参数模板函数允许函数接受未知数量的参数。但是,它们不会对参数强制执行任何类型约束。
强制类型安全
为了保证所有参数都具有相同的类型,我们可以采用以下方法步骤:
示例:
以下代码演示了如何实现此技术:
template<typename R, typename...> struct fst { typedef R type; }; template<typename ...Args> typename fst<void, typename enable_if< is_convertible<Args, ToType>::value >::type... >::type f(Args...);
用法:
此代码确保传递给 f 的所有参数都可以转换为 ToType 类型。如果任何参数不可转换,编译器将发出错误。
稍后转换方法:
或者,如果您知道从数组转换为所需的类型,您可以使用以下方法:
template<typename ...Items> dragon_list_t make_dragon_list(Items... maidens) { std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }}; // here be dragons }
结论:
通过利用可变参数模板函数和 SFINAE,我们可以强制可变参数参数的类型安全,确保所有参数的类型相同。这使我们能够创建对同质数据进行操作的函数,而不需要额外的数据结构。
以上是如何确保传递给可变参数函数或模板函数的所有参数都具有相同的类型,而不使用额外的数据结构?的详细内容。更多信息请关注PHP中文网其他相关文章!