| English | 日本語 |

Tokyo Linux Users Group

#include <iostream>

class AClass
{
   public:

    void method1()
    {
       std::cout << "Method 1" << std::endl;
    };

    void method2()
    {
       std::cout << "Method 2" << std::endl;
    };
};


int main()
{
   AClass  inst1;
   AClass* inst2;

   void (AClass::*Method)(void);

   inst2 = new AClass;
   Method = &AClass::method1;
   (inst1.*Method)();

   Method = &AClass::method2;
   (inst2->*Method)();
   delete inst2;
}

Output:

[vuhung@teriyaki SimpleCallBackExamples]$./example0
Method 1
Method 2
#include <iostream>

class AClass
{
   public:

    void method1(unsigned int value)
    {
       std::cout << "Method 1 - Value: " << value << std::endl;
    };

    bool method2(unsigned int value)
    {
       std::cout << "Method 2 - Value: " << value << std::endl;
       return true;
    };

};

int main()
{
   AClass instance;

   void (AClass::*MethodType1)(unsigned int);
   bool (AClass::*MethodType2)(unsigned int);

   MethodType1 = &AClass::method1;
   MethodType2 = &AClass::method2;

   (instance.*MethodType1)(123);

   if ((instance.*MethodType2)(456))
     std::cout << "Method returned a TRUE result." << std::endl;
   else
     std::cout << "Method returned a FALSE result." << std::endl;

   return true;
}

Output:

[vuhung@teriyaki SimpleCallBackExamples]$./example1
Method 1 - Value: 123
Method 2 - Value: 456
Method returned a TRUE result
#include <iostream>

template <typename AType>
class AClass
{

   public:
    AClass(AType _data)
    {
       data = _data;
    };

    AType operator()()
    {
       std::cout << data << std::endl;
       return data;
    };

   private:

    AType data;
};


int main()
{
   int    (AClass< int >::*int_method)();
   double (AClass< double >::*double_method)();

   AClass < int > instance1(123);
   AClass < double > instance2(456.789);

   int_method = &AClass< int >::operator();
   double_method = &AClass< double >::operator();

   (instance1.*int_method)();
   (instance2.*double_method)();

   return true;
}

Output:

[vuhung@teriyaki SimpleCallBackExamples]$./example2
123
456.789