首先,你需要这些包括:
#include <type_traits>
#include <tuple>
那么,让我们来声明可变参数模板检测类型是否是否相同:
template <typename ... args>
struct all_same : public std::false_type {};
template <typename T>
struct all_same<T> : public std::true_type {};
template <typename T, typename ... args>
struct all_same<T, T, args...> : public all_same<T, args ... > {};
现在我们可以使用static_assert
来检测p arameters类型是相同的:
template <typename T, typename... args>
T* make_arr(args... arg) {
// Code to check if passed args are of the same type
static_assert(all_same<args ...>::value, "Params must have same types");
T* arr = new T[sizeof...(arg)]{ arg... };
return arr;
};
最后,让我们把你的功能第一类参数的返回类型 - 如果所有的类型都是相同的,我们可以采取任何人。我们使用std::tuple
这个
template <typename... args>
typename std::tuple_element<0, std::tuple<args...> >::type * make_arr(args... arg) {
// Code to check if passed args are of the same type
static_assert(all_same<args ...>::value, "Params must have same types");
typedef typename std::tuple_element<0, std::tuple<args...> >::type T;
T* arr = new T[sizeof...(arg)]{ arg... };
return arr;
};
不确定,但你尝试'typeid'函数。 – seleciii44
您希望'args'与其他类型*相同,并且可能与'T'有所不同?或者你希望它们都与'T'类型相同?或者你允许它们彼此不同,但只是要求可以用可以转换为'T'的类型来构建'T'数组? –