如何检查传递给可变参数函数的参数的类型

蕾丝

我是可变参数模板的新手,为了学习起见,请考虑以下功能

template <typename T, typename... args>
T* make_arr(args... arg) {

   // Code to check if passed args are of the same type

   T* arr = new T[sizeof...(arg)]{ arg... };
   return arr;
}

我有两个问题:

  1. 我希望函数被模板化,并且我希望传递的参数具有相同的类型,所以问题是:是否可以检查传递的参数是否具有相同的类型?
  2. 是否可以通过推导的类型来推导数组指针的类型args...,我的意思是不使用<typename T>...我用了decltype(arg)但没有用...

注意:如果不合适,请编辑标题问题...谢谢

火箭1111

我发现的唯一方法是使用SFINAE进行辅助功能

//Basic function
template<typename T>
void allsame(T) {}

//Recursive function
template<typename T, typename T2, typename... Ts, 
typename = std::enable_if_t<std::is_same<T, T2>::value>>
void allsame(T arg, T2 arg2, Ts... args)
{
    allsame(arg2, args...);
}

然后可以这样称呼它:

allsame(arg...);

如果类型不同,则编译器将引发错误。


对于2),您可以修改allsame以返回类型。此函数的唯一缺点是,如果类型不是默认可构造的,则该函数将不起作用。

template<typename T>
T allsame(T) { return{}; }

T allsame(T arg, T2 arg2, Ts... args)

然后,您可以decltype(allsame(args...))获取类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查传递给Typescript函数的参数?

如何合并传递给具有可变参数的函数的数组

如何将arrayList的元素传递给可变参数函数

如何将可变参数传递给虚函数

将可变参数模板参数传递给可变函数

具有不同类型参数的可变参数函数传递给它

修改传递给函数内部可变参数函数的参数

如何汇总传递给可变参数宏的可变参数?

如何将可变函数参数作为参数传递给另一个函数?

如何将可变参数函数的其余参数传递给另一个函数?

如何将可变参数传递给基于参数数量调用特定函数的函数?

Kotlin:如何将具有可变参数的函数作为参数传递给其他函数

如何检查参数是否传递给C中的函数?

将参数传递给C中的可变参数函数

如何使用可变参数将任意数量的相同类型参数传递给方法?

如何将类类型作为参数传递给函数?

如何验证传递给模拟函数的参数的派生类型

如何在Go中将类型传递给函数参数

如何限制可传递给函数的可调用参数的类型?

如何读取传递给采用某种可变参数的函数的所有参数?

如何将向量元素作为参数传递给可变参数模板函数?

检查传递给 `AttributeUsageAttribute` 构造函数的参数

将“类型”参数传递给函数

为什么规范禁止将类类型传递给可变参数C ++函数?

如何计算传递给可变参数宏的宏参数的数量?

如何传递可变参数模板函数?

将[] string传递给需要可变参数的函数

是否可以将可变数量的参数传递给函数?

可变参数传递给lapply调用中的函数