模板函数中的可变类型名称

Variadic Typenames in Template Functions

我研究可变参数模板已经有一段时间了,我发现了一些我想做的事情,但我不知道是否可行。

关于我要完成的事情的粗略想法是一个模板 class,它根据存储在其中的对象类型执行特定操作。我希望能够处理继承,因此类型 "Derived" class 将包含在仅处理 "Base" 对象的操作中。我发现可变参数模板正是我所需要的,但我无法让它们按我想要的方式工作。

基本上,我想知道您是否可以制作一个接受可变数量的类型名而不是可变数量的参数的可变参数函数。

这是我目前的情况:

template <typename T>
void DoesNotWork()
{
    //Do stuff
}

template <typename T, typename ...Args>
void DoesNotWork()
{
    //Do stuff

    DoesNotWork<Args...>();
} 

但是,由于两个函数的参数数量相同,因此会引发 "ambiguous function reference" 错误。如果我删除 top 函数,最后的递归调用会尝试调用没有定义的 "DoesNotWork<>()"。

我该怎么做?或者这是不可能的?

Args 为空时,无法消除两个函数之间的歧义。

您需要的是:

template <typename T>
void DoesNotWork()
{
    //Do stuff
}

template <typename T1, typename T2, typename ...Args>
void DoesNotWork()
{
    //Do stuff

    DoesNotWork<T2, Args...>();
}