我有一個簡單的模板類,它有兩個函數指針和一個值。一個指針是比較運算符,另一個是對象(例如getX())。實例對象的C++函數指針
頁眉:
template<class T>
class A {
public:
A(T (*function)(), const bool (*op)(T,T),const T value) :
function(function), value(value), op(op){}
bool valid();
private:
T value;
T (*function)();
bool (*op)(T, T);
};
CPP:
#include "A.h"
template<class T>
bool A<T>::valid(){
return (op(function(),value));
}
因此,如果你創建了一個實例:
A<float> a = A<float>(x->getX,operator==,20);
當有效的被稱爲是將相當於:
x->getX() == 20;
實際的頭文件/類定義正常工作。問題在於創建A的實例;它不起作用。我認爲這是因爲'x-> getX',但有沒有辦法做我想要的?
謝謝。
EDIT ::
確切編譯器錯誤是:
.... \類\對象\ B.cpp:42:錯誤:對呼叫至「A ::沒有匹配函數A(無法解析的重載函數類型,無法解析的重載函數類型,float)' .... \ Classes \ Objects/Ah:30:note:candidates are:A :: A(T()(),const bool( )(T,T),T)[with T = float] .... \ Classes \ Objects/Ah:26:note:A :: A(const A &)
請注意: 'X->的getX' 返回一個float
「不行」是什麼意思? – 2013-03-02 20:32:59
函數指針不是函子。函子是一個重載'operator()'的類。 – 2013-03-02 20:34:20
更改爲函數指針。通過「不起作用」,我的意思是在創建A的實例時它不會編譯。 – aoi 2013-03-02 20:35:54