同一函数中类的多个模板

Multiple templates of a class in the same function

本文关键字:函数      更新时间:2023-10-16

我收到与使用相同的类但不同类型的 int 和 char 相关的错误

template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack, LinkedStack<ItemType> operatorStack)

valueStack 是 int,operatorStack 是 char。

当我编译时,这是它附加到错误的注释。

template argument deduction/substitution failed:

后跟此注释

deduced conflicting types for parameter ‘ItemType’ (‘int’ and ‘char’)

在同一函数定义中是否可以具有相同类的多种类型?

当您使用

template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack,
LinkedStack<ItemType> operatorStack) { ... }

valueStackoperatorStack必须属于同一类型。

除非operatorStack可以是不同于LinkedStack<char>的类型,否则可以使用:

template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> valueStack,
LinkedStack<char> operatorStack) { ... }

除非您的函数需要更改参数,否则我建议将参数const&

template <typename ItemType>
int Infix::performOp(LinkedStack<ItemType> const& valueStack,
LinkedStack<char> const& operatorStack) { ... }

您不能让特定的template参数在调用中作为多个类型工作; 就像尝试在相同情况下对多个值使用相同的函数参数一样。

解决方案是使用多个template参数:

template <typename ItemType1, typename ItemType2>
int Infix::performOp(LinkedStack<ItemType1> valueStack,
LinkedStack<ItemType2> operatorStack)