C++ : Funktionsaufruf Operator überladen

Abend !

Ich habe viele nette Sachen im Internet gefunden zum überladen des () operators, ich will /muss aber als return value, die Adresse einer Methode in einer Klasse haben.

Code:
#include <iostream>
#include <boost/thread/thread.hpp>

// Test Klasse
class C
{
    public:
        C(){} //
        // Operator ueberladen
        C operator()()
        {
            // TODO
        }
        // sinnlose Methode innerhalb einer Klasse zum testen
        void init(void)
        {
            for(unsigned int i = 0; i < 10000; i++)
                std::cout<<i<<std::endl;
        }
};
// sinnlose Methode ausserhalb einer Klasse zum testen
void init(void)
{
    for(unsigned int i = 0; i < 10000; i++)
    std::cout<<"-->"<<i<<std::endl;
}
int main()
{
    C *c = new C();
	//boost::thread t1(&c());
	boost::thread t2(&init);
	c->init();
}

Ich will mittels boost:thread einen Funktion in einer Klasse starten, die als Thread laufen soll, jedoch klappt es halt nicht, weil Sie innerhalb einer Klasse ist, wie kann man dies "elegant" lösen ?
 
1. Falls du statische Methoden benutzen willst :)
Code:
#include <iostream>
#include <boost/thread/thread.hpp>

// Test Klasse
class C
{
    public:
        C(){} //
        // Operator ueberladen
        C operator()()
        {
            // TODO
        }
        // sinnlose Methode innerhalb einer Klasse zum testen
        static void init(void)
        {
            for(unsigned int i = 0; i < 10000; i++)
                std::cout<<i<<std::endl;
        }
};

// sinnlose Methode ausserhalb einer Klasse zum testen
void init(void)
{
    for(unsigned int i = 0; i < 10000; i++)
    std::cout<<"-->"<<i<<std::endl;
}
int main()
{
    C * c = new C();
	void (*ptr)() = &C::init;
	boost::thread t1(ptr);
	boost::thread t2(&init);

	getchar();
}

2. Normale Methoden

Code:
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>

// Test Klasse
class C
{
    public:
        C(){} //
        // Operator ueberladen
        C operator()()
        {
            // TODO
        }
        // sinnlose Methode innerhalb einer Klasse zum testen
        void init(void)
        {
            for(unsigned int i = 0; i < 10000; i++)
                std::cout<<i<<std::endl;
        }
};

// sinnlose Methode ausserhalb einer Klasse zum testen
void init(void)
{
    for(unsigned int i = 0; i < 10000; i++)
    std::cout<<"-->"<<i<<std::endl;
}
int main()
{
    C * c = new C();
	boost::thread t1(boost::bind(std::mem_fun(&C::init), c));
	boost::thread t2(&init);

	getchar();
}

3. operator ()

Mit typedef void (C::*blabla)(); erhälst du einen Zeiger der auf passende Methoden der C Klasse zeigen kann :) -> Rest sollte dann einfach sein :)
 
Zurück
Oben