重载运算符'=='的麻烦。需要能够使用模板处理字符串,双精度和日期

时间:2014-05-09 18:44:32

标签: c++ templates operator-overloading

我有一个模板函数,用于处理名为搜索的变量,该变量的类型可以是字符串,双精度或日期

重载运算符用于检查类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());
            */
}   

1 个答案:

答案 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重载。