使用函數指標引用內建在範本類別中的「大於」運算子 (">") 等運算子中,有必要指定正確的類型重載。然而,這可能具有挑戰性。
C 內建運算符,例如算術運算符和邏輯運算符,不是真正的運算子函數。相反,它們被編譯器直接翻譯成彙編指令。因此,不可能獲得它們的函數指標。
C 標準中定義的函數物件提供了一種處理類似於函數指標的操作的方法但不是實際的功能。它們是模板化對象,在其operator()函數中衰減為類似的運算子。
例如,std::greater函數物件表示大於運算子(">")。它可以用作模板類別中的函數指標參數。
template
class MyAction
{
public:
MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare)
: arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {}
bool operator()()
{
if((fnCompare_)(arg0_,arg1_))
{
// Do this
}
else
{
// Do s.th. else
}
}
private:
ParamsType& arg0_;
ParamsType& arg1_;
FnCompareType& fnCompare_;
}
void doConditional(int param1, int param2)
{
MyAction> action(param1, param2);
if(action())
{
// Do this
}
else
{
// Do that
}
}
雖然函數指標不能直接與內建運算子一起使用,但它們可以與實際函數實現的標準庫運算子一起使用。但是,有必要為運算子實例化模板類別的特定實例,並且編譯器可能需要提示才能正確推導模板參數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3