समस्याएं मुझे परेशान करने में यह समस्या है। मैं 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);
किसी भी विचार? आपकी मदद के लिए अग्रिम धन्यवाद।
सिमोन
एक कंपाइलर बग की तरह लगता है। : | – Nawaz
हां मुझे यह भी माना जाता है। यह काफी अजीब है – Simone
मुझे व्युत्पन्न वर्ग के सदस्य कार्य-सूचक के साथ बेस-स्तरीय फ़ंक्शंस (या ऑपरेटरों) का उपयोग करके, इसके साथ कुछ समस्याएं थीं। कम से कम एमएसवीसी में, यह सिर्फ टेम्पलेट्स में काम नहीं करता है। – Xeo