对于每个模板类型,设置类型的参数

Aar*_*man 7 c++ variadic-templates

假设我有一个可变参数模板类.如何创建一个函数,使其参数属于集合类型,例如int,参数的数量等于模板类型的数量?

template <typename... Types>
class Test
{
public:
    void Func(???); // I don't know how to declare such a function
}

Test<string, bool, long> myTest; // Three types
myTest.Func(905, 36, 123315); // Three arguments, but always of type int.
Run Code Online (Sandbox Code Playgroud)

最后,该函数的目标是返回所提供的int的元组.为简单起见,我在示例代码中将函数显示为void.

Pio*_*cki 18

template <typename... Types>
class Test
{
    template <typename>
    using int_t = int;

public:    
    void Func(int_t<Types>... ints)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

DEMO

  • @AartStuurman它是一个别名模板,设计方式使得无论你指定什么类型模板参数,比如说`T`,那么`int_t <T>`总是被`int`取代.未使用的类型模板参数用于利用包扩展并生成函数参数列表 (3认同)