我一直在研究可变参数模板一段时间,我发现了一些我想做的事情,但我不知道这是否可行。对于我要完成的工作,一个大概的想法是一个模板类,它根据存储在对象中的对象类型执行特定的操作。我希望能够处理继承,因此类型“Derived”类将包含在仅处理“Base”对象的操作中。我已经知道,可变参数模板是我所需要的,只是无法让它们按我的意愿工作。基本上,我想知道您是否可以使一个可变参数函数接受可变数量的类型名而不是可变数量的参数。这是我到目前为止的内容:template <typename T>void DoesNotWork(){ //Do stuff}template <typename T, typename ...Args>void DoesNotWork(){ //Do stuff DoesNotWork<Args...>();}但是,由于两个函数具有相同数量的参数,因此会引发“歧义函数引用”错误。如果删除顶部函数,则最后一个递归调用将尝试调用没有定义的“DoesNotWork ()”。我将如何去做呢?还是不可能? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 当Args为空时,没有任何方法可以消除这两个函数之间的歧义。您需要的是:template <typename T>void DoesNotWork(){ //Do stuff}template <typename T1, typename T2, typename ...Args>void DoesNotWork(){ //Do stuff DoesNotWork<T2, Args...>();} (adsbygoogle = window.adsbygoogle || []).push({}); 09-06 20:03