我有這個問題困擾着我。我有FSM類關聯鍵回調作爲模板參數的問題
class FSM
{
public:
typedef bool (FSM::*InCallback_t)(int);
typedef std::map< std::string, InCallback_t > Table;
// Since I would like to allow the user to register both functors and class member functions
template< typename Callback_t, bool (Callback_t::*CallbackFunct_t)(int) >
bool callback(int x)
{
return (Callback_t().*CallbackFunct_t)(x);
}
void addCallback(const std::string& iKey, InCallback_t iCallback)
{
_table.insert(std::make_pair(iKey, iCallback));
}
[ ... ]
private:
Table _table;
};
還有一些回調類
class CallbackBase
{
public:
bool operator()(int x){ return doCall(x); }
private:
virtual bool doCall(int x){ return true; }
};
class Callback: public CallbackBase
{
private:
bool doCall(int x)
{
std::cout << "Callback\n";
return true;
}
};
現在如果到主我做的:
FSM aFSM;
// OK
aFSM.addCallback("one", &FSM::callback< CallbackBase, &CallbackBase::operator() >);
// KO
aFSM.addCallback("two", &FSM::callback< Callback, &Callback::operator() >);
第一個電話是好的,在第二個編譯器抱怨:
Test.cpp: In function ‘int main(int, char**)’:
Test.cpp:104:77: error: no matching function for call to ‘FSM::addCallback(const char [4], <unresolved overloaded function type>)’
Test.cpp:104:77: note: candidate is:
Test.cpp:24:7: note: void FSM::addCallback(const string&, FSM::InCallback_t)
Test.cpp:24:7: note: no known conversion for argument 2 from ‘<unresolved overloaded function type>’ to ‘FSM::InCallback_t’
還要注意,以下是罰款
typedef bool (Callback::*Function_t)(int);
Function_t aFunction = &Callback::operator();
(Callback().*aFunction)(5);
任何想法? 在此先感謝您的幫助。
Simone
看起來像一個編譯器錯誤。 :| – Nawaz
是的,我也是。這很奇怪 – Simone
我也遇到了一些問題,使用基類函數(或運算符)和派生類的成員函數指針。在MSVC atleast中,它只是在模板中不起作用。 – Xeo