I tried this:
Code:
#include <iostream>
#include <vector>
using namespace std;
template <class MyDummyClass, typename ReturnType, typename Parameter>
class SingularCallBack
{
public:
typedef ReturnType (MyDummyClass ::*Method)(Parameter);
SingularCallBack(MyDummyClass* _class_instance, Method _method)
{
class_instance = _class_instance;
method = _method;
};
ReturnType execute(Parameter parameter)
{
return (class_instance->*method)(parameter);
};
private:
MyDummyClass* class_instance;
Method method;
};
class BaseClass
{
public:
virtual bool DerivedMethod (const std::string& str)
{
return true;
}
};
class AClass : public BaseClass
{
public:
template < class derivedComponent, class Allocator = allocator<derivedComponent> > class callbackList;
AClass () {}
bool AMethod( std::string& str)
{
std::cout << "AClass[]: " << str << std::endl;
return true;
}
};
int main()
{
AClass a ();
a.callbackList.push_back (SingularCallBack < AClass, bool, const std::string& > (&a, &AClass :: AMethod, "sadsa"));
return 0;
}
Below is the compilation error:
Code:
anisha@linux-uitj:~> g++ callback3.cpp -Wall -Wextra
callback3.cpp:31: warning: unused parameter ‘str’
callback3.cpp: In function ‘int main()’:
callback3.cpp:54: error: request for member ‘callbackList’ in ‘a’, which is of non-class type ‘AClass()’
callback3.cpp:54: error: no matching function for call to ‘SingularCallBack<AClass, bool, const std::string&>::SingularCallBack(AClass (*)(), bool (AClass::*)(std::string&), const char [6])’
callback3.cpp:11: note: candidates are: SingularCallBack<MyDummyClass, ReturnType, Parameter>::SingularCallBack(MyDummyClass*, ReturnType (MyDummyClass::*)(Parameter)) [with MyDummyClass = AClass, ReturnType = bool, Parameter = const std::string&]
callback3.cpp:7: note: SingularCallBack<AClass, bool, const std::string&>::SingularCallBack(const SingularCallBack<AClass, bool, const std::string&>&)
Please help.