我有一个模板函数,用于处理名为搜索的变量,该变量的类型可以是字符串,双精度或日期。
重载运算符用于检查类TransactionList的实例(该帐户的每个银行交易的列表)是否与搜索相同,例如。对于给定交易的金额,头衔或日期。
开关用于指示已采用哪个选项并通过搜索变量传递。
搜索变量到达但仅适用于金额atm。我怎样才能将所有三种数据类型合并到模板化函数或重载运算符中?
需要使用getAmount(),getTitle()和getDate()。
模板程序
template <typename T>
TransactionList TransactionList::getTransactionsForSearch(T search) const
{
TransactionList tempTrList(*this);
TransactionList trlAmount;
while (tempTrList.size() > 0 )
{
if(search == tempTrList.newestTransaction().getAmount())
/* commented out attempt
||search == tempTrList.newestTransaction().getTitle()
||search == tempTrList.newestTransaction().getDate()
*/
trlAmount.addNewTransaction(tempTrList.newestTransaction());
tempTrList.deleteFirstTransaction();
}
return trlAmount;
}
重载运算符
template<typename T>
bool TransactionList::operator==(const T& var )
{
return (var == tempTrList.newestTransaction().getAmount());
/*commented out attempt
||var == listOfTransactions_.newestTransaction().getDate()
||var == listOfTransactions_.newestTransaction().getTitle());
*/
}
答案 0 :(得分:1)
我会避免覆盖operator==()
,因为这不是平等,而是匹配。因此,我选择在返回的match()
上使用函数Transaction
来检查使用正常重载的金额,标题或日期。然后代码变为:
template <typename T>
TransactionList TransactionList::getTransactionsForSearch(T search) const {
TransactionList tempTrList(*this);
TransactionList trlAmount;
while (tempTrList.size() > 0 ) {
if(tempTrList.newestTransaction().matches(search))
trlAmount.addNewTransaction(tempTrList.newestTransaction());
tempTrList.deleteFirstTransaction();
}
return trlAmount;
}
bool Transaction::match(const double& search) const {
return search == tempTrList.newestTransaction().getAmount();
}
bool Transaction::match(const string& search) const {
return search == tempTrList.newestTransaction().getTitle();
}
bool Transaction::match(const date& date) const {
return search == tempTrList.newestTransaction().getDate();
}
添加更多搜索功能只需要向match()
类添加新的Transaction
重载。