有一個我想得到的值
這個值從一個全域函數產生
我只能傳函數指標進全域函數,才能得到這個值
當我想要要物件化時,我遇到了麻煩
======================================================
//GlobalFunc( bool(*)(int*) ); //這是別人寫好的,我不能改變
/**A.hpp*/
class A
{
friend GlobalFunc( bool(*)(int*) );
public:
A();
bool foo( int* someingYouWant )
{
a = someingYouWant;
return ( a == NULL );
}
int * a;
}
======================================================
/**A.cpp*/
A::A()
{
a = NULL;
GlobalFunc( &foo );
//GlobalFunc( *foo );
//GlobalFunc( foo );
}
======================================================
error:
ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function.
苦思許久,想到了下面這個方法
======================================================
//GlobalFunc( bool(*)(int*) ); //這是別人寫好的,我不能改變
/**A.hpp*/
class A
{
public:
A();
int * a;
}
======================================================
/**A.cpp*/
namespace
{
int * a_ = NULL;
bool foo( int* someingYouWant )
{
a_ = someingYouWant;
return ( a_ == NULL );
}
}
A::A()
{
a = NULL;
GlobalFunc( &foo );
//GlobalFunc( *foo );
//GlobalFunc( foo );
a = a_;
}
======================================================
但這方法讓我感覺不像物件導向
是否有其他方法解決這個問題?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我又想到了一種變形
======================================================
//GlobalFunc( bool(*)(int*) ); //這是別人寫好的,我不能改變
/**A.hpp*/
class A
{
public:
A();
int * a;
static bool foo( int* someingYouWant )
{
a_ = someingYouWant;
return ( a_ == NULL );
}
private:
static int * a_;
}
======================================================
/**A.cpp*/
A::A()
{
a = NULL;
GlobalFunc( &foo );
//GlobalFunc( *foo );
//GlobalFunc( foo );
a = a_;
}
======================================================
這樣比較像物件導向:D
有沒有更好的方法呢?
沒有留言:
張貼留言