同一函数中的一个类的多个模板

时间:2018-03-13 03:32:59

标签: c++

我收到与使用相同类但使用不同类型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’)

在同一个函数定义中是否可以使用同一类的多个类型?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

使用时

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) { ... }