Pointer to function, pointer to function member of class.
Pointer to function, pointer to function member of class.
#Cara 1 : Secara tradisional
Function pointer (pointer ke fungsi/penunjuk ke fungsi), dapat didefinisikan sebagai berikut:
(typeReturn*) functPointer(typeArgument,typeArgument2,..,typeArgumentN)
sebagai contoh, terdapat 2 fungsi dibawah ini:
[sourcecode language=“cpp”] void Function1() { cout<<” call Function1 Function1”<<endl; } int Function2(int a,int b) { return (a*b); }
[/sourcecode]
Contoh pemakaian function pointer dari 2 fungsi diatas, sebagai berikut:
[sourcecode language=“cpp”] void (*pf)(); // deklarasi pf=Function1; // assignment pf(); // pemanggilan
int (*pf2)(int,int); // deklarasi
pf2=Function2; // assignment
int c=pf2(5,2); // pemanggilan
[/sourcecode]
Lalu bagaimana kalau kita mau membuat function pointer yang menunjuk ke fungsi yang merupakan anggota dari sebuah class? . Deklarasi dan pemanggilannya agak berbeda, seperti contoh kelas Test dibawah ini:
[sourcecode language=“cpp”]
class Test
{
private:
void (Test::*pf1)(); // deklarasi
int (Test::*pf2)(int,int); // deklarasi
public:
Test()
{
pf1=&Test::Function1; //assignment
pf2=&Test::Function2; //assignment
};
~Test(){};
void Function1()
{
cout<<” call Function1 Function1 “<
[/sourcecode]
Dengan sedikit memodifikasi function pointer di kelas Test diatas , kita bisa memakai array of function pointer to member class . Misal kita akan mengubah pf1 sebagai array dari function pointer. Deklarasi, assignment, pemanggilan:
[sourcecode language=“cpp”] void (Test::*pf1)[10](); // deklarasi, jumlah element array=10
pf1[0]=&Test::Function10; //assignment
pf1[1]=&Test::Function11; //assignment
….
….
pf1[9]=&Test::Function12; //assignment
...
...
(this->*pf1)[index](); //pemanggilan , index= index yang di panggil
[/sourcecode]
Dalam penggunaannya, array dari function pointer mungkin lebih sering digunakan.
#Cara 2 : Menggunakan Boost Library ( boost::function ) Pointer ke free function :
[sourcecode language=“cpp”]
boost::function
boost::function<int (int,int)>funcp1; // akan menunjuk ke: int Function2(int a,int b)
funcp1=&Function2;
int h=funcp1(12,6); //maka h=72.
[/sourcecode]
Untuk mengetahui function pointer yang menunjuk ke fungsi yang merupakan anggota dari sebuah class, function pointer di kelas Test diatas saya ubah sebagai berikut:
[sourcecode language=“cpp”]
class Test2
{
private:
boost::function
Dapat dilihat di kelas test diatas, yang berubah adalah deklarasi dan pemanggilan. Why boost? .it’s great. < mbebek :D >
comments powered by Disqus