具有相等参数类型的可变参数模板函数

Ral*_*zky 8 c++ variadic-templates c++11

我想写一个模板函数,如下所示:

template <typename T>
void f( const T & ...args ) // <-- This doesn't work, unfortunately.
{
    std::array<T> arr = { args... };
    // and so forth.
}
Run Code Online (Sandbox Code Playgroud)

显然,C++不允许这样做,因为左侧需要一个模板参数包...args才能使用.我想要的是一个模板函数,其中所有参数类型都相同.有一个简单的方法吗?

Sir*_*Guy 3

    template <typename ... T>
    void f(const T & ... args)
    {
        std::array<typename std::common_type<T...>::type,
                   sizeof...(T)> arr = {args...};
    }
Run Code Online (Sandbox Code Playgroud)

或来自std::experimental

   template <typename ... T>
   void f(const T & ... args)
   {
        auto arr = std::experimental::make_array<void>(args...);
   }
Run Code Online (Sandbox Code Playgroud)

void 使返回类型成为common_type输入参数的类型,否则您可以明确指定您想要的类型(如果您知道的话)。