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

时间:2015-02-03 16:57:24

标签: c++ templates variadic-templates variadic-functions

我一直在玩变量模板一段时间,我发现了一些我想做的事情,但我不知道是否可能。

我想要完成的一个粗略的想法是一个模板类,它根据存储的对象的类型执行特定的操作。我希望能够处理继承,因此类型“Derived”类将包含在仅处理“Base”对象的操作中。我已经发现变量模板是我需要的,我只是不能让它们像我想的那样工作。

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

这是我到目前为止所做的:

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

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

    DoesNotWork<Args...>();
} 

但是,因为两个函数具有相同数量的参数,所以它会引发“模糊函数引用”错误。如果我删除top函数,最后一次递归调用会尝试调用“DoesNotWork&lt;&gt;()”,它没有定义。

我该怎么做呢?或者这不可能吗?

1 个答案:

答案 0 :(得分:3)

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

您需要的是:

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

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

    DoesNotWork<T2, Args...>();
} 
相关问题