为可变参数模板推断参数类型?

use*_*459 5 c++ templates

有没有办法推断列表的类型,以避免必须传递列表应该的参数类型,只是从第一个元素类型推断它.

template<typename T, T... Args>
struct Calc
{
    // do stuff with Args
};

// Usage:
Calc<int, 1, 2, 3>::value;

typename<T... Args> Calc { }; // error T undefined

// Desired:
Calc<1, 2, 3>::value;          // auto deduced T = int
Calc<1.0f, 2.0f, 3.0f>::value; // auto deduced T = float
Run Code Online (Sandbox Code Playgroud)

有没有办法获得所需的行为,或者我必须将类型包含为参数?

Fly*_*see 0

据我所知,c++14 之前是不可能的。然而,c++17 引入了用户定义的推导指南,其中广泛描述:类模板参数推导