我需要這樣的一個功能:傳遞類的非靜態函數指針作爲參數
class Class_A
{
...
bool ShowVariableConstituents(CString (* ValueOutput)(double));
...
}
bool Class_A::ShowVariableConstituents(CString (* ValueOutput)(double))
{
double dUncalculatedValue;
....
if(ValueOutput )
{
CString strValue = ValueOutput(dUncalculatedValue);
}
....
}
下面是一個例子,我需要如何使用它:
class Class_B : Class_A
{
...
int Calculate();
CString ValueOutput(double dValue);
...
}
CString Class_B::ValueOutput(double dValue)
{
CString strValue;
strValue.Format("%6.2f", (dValue/m_dAmount * 100));
return strValue;
}
int Class_B::Calculate()
{
...
ShowVariableConstituents(& Class_B::ValueOutput);
...
}
我得到的錯誤:
Error 1 error C2664: ' Class_A::ShowVariableConstituents': conversion of Parameter 1 from 'CString (__thiscall Class_B::* )(double)' in 'CString (__cdecl *)(double)' not possible
你能幫我做是正確的?
問候 camelord
的幾個問題:
然後,你可以按如下方式使用它ShowVariableConstituents私人? 確實ShowVariableConstituents必須接受任何功能或只是Class_B的方法(可能繼承)? 確實ValueOutput必須是一個實例方法?它在示例中看起來不像這樣,但示例可能會簡化。 – 2010-07-26 12:09:12
還有一個問題。在什麼情況下一個類你想打電話ValueOutput在ShowVariableConstituents。與ShowVariableConstituents被調用的可能相同,或者可能是其他的? – 2010-07-26 12:10:58
我已經更新了我的回答與工作代碼來證明我說的是概念。請忽略特定於Qt的項目。這是我目前唯一的IDE。 – 2010-07-26 12:22:37