#include <iostream>
class Ptr
{
public:
typedef void (*ptr_type) ();
Ptr(const Ptr& value);
Ptr(ptr_type value);
ptr_type GetPtr() const;
Ptr& operator=(const Ptr& value);
Ptr& operator=(ptr_type value);
private:
ptr_type value_;
};
Ptr::Ptr(const Ptr& value) :
value_(value.value_)
{
}
Ptr::Ptr(ptr_type value) :
value_(value)
{
}
Ptr::ptr_type Ptr::GetPtr() const
{
return value_;
}
Ptr& Ptr::operator=(const Ptr& value)
{
value_ = value.value_;
return *this;
}
Ptr& Ptr::operator=(ptr_type value)
{
value = value_;
return *this;
}
class TestClass
{
public:
TestClass();
static void TestFunction();
};
TestClass::TestClass()
{
Ptr myPtr = TestFunction; //Diese Zeile geht NICHT!
Ptr myPtr2(TestFunction); //Diese Zeile geht!
myPtr.GetPtr()();
}
void TestClass::TestFunction()
{
std::wcout << L"Geht doch!" << std::endl;
}
int main()
{
TestClass myTestClass;
std::wcout << L"Press any Key to exit!" << std::endl;
std::cin.get();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgUHRyCnsKcHVibGljOgogICAgdHlwZWRlZiB2b2lkICgqcHRyX3R5cGUpICgpOwoKICAgIFB0cihjb25zdCBQdHImIHZhbHVlKTsKICAgIFB0cihwdHJfdHlwZSB2YWx1ZSk7CiAgIAogICAgcHRyX3R5cGUgR2V0UHRyKCkgY29uc3Q7CiAgICBQdHImIG9wZXJhdG9yPShjb25zdCBQdHImIHZhbHVlKTsKICAgIFB0ciYgb3BlcmF0b3I9KHB0cl90eXBlIHZhbHVlKTsKCnByaXZhdGU6CiAgIHB0cl90eXBlIHZhbHVlXzsKfTsKClB0cjo6UHRyKGNvbnN0IFB0ciYgdmFsdWUpIDoKICAgIHZhbHVlXyh2YWx1ZS52YWx1ZV8pCnsKfQoKUHRyOjpQdHIocHRyX3R5cGUgdmFsdWUpIDoKICAgIHZhbHVlXyh2YWx1ZSkKewp9CgpQdHI6OnB0cl90eXBlIFB0cjo6R2V0UHRyKCkgY29uc3QKewogICAgcmV0dXJuIHZhbHVlXzsKfQoKUHRyJiBQdHI6Om9wZXJhdG9yPShjb25zdCBQdHImIHZhbHVlKQp7CiAgICB2YWx1ZV8gPSB2YWx1ZS52YWx1ZV87CiAgICByZXR1cm4gKnRoaXM7Cn0KClB0ciYgUHRyOjpvcGVyYXRvcj0ocHRyX3R5cGUgdmFsdWUpCnsKICAgIHZhbHVlID0gdmFsdWVfOwogICAgcmV0dXJuICp0aGlzOwp9CgpjbGFzcyBUZXN0Q2xhc3MKewpwdWJsaWM6CiAgICBUZXN0Q2xhc3MoKTsKCiAgICBzdGF0aWMgdm9pZCBUZXN0RnVuY3Rpb24oKTsKfTsKClRlc3RDbGFzczo6VGVzdENsYXNzKCkKewogICAgUHRyIG15UHRyID0gVGVzdEZ1bmN0aW9uOyAgICAvL0RpZXNlIFplaWxlIGdlaHQgTklDSFQhCiAgICBQdHIgbXlQdHIyKFRlc3RGdW5jdGlvbik7ICAgIC8vRGllc2UgWmVpbGUgZ2VodCEKICAgIG15UHRyLkdldFB0cigpKCk7Cn0KCnZvaWQgVGVzdENsYXNzOjpUZXN0RnVuY3Rpb24oKQp7CiAgICBzdGQ6Ondjb3V0IDw8IEwiR2VodCBkb2NoISIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKICAgIFRlc3RDbGFzcyBteVRlc3RDbGFzczsKICAgIHN0ZDo6d2NvdXQgPDwgTCJQcmVzcyBhbnkgS2V5IHRvIGV4aXQhIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNpbi5nZXQoKTsKICAgIHJldHVybiAwOwp9