Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: EDelegate - Delegate of C# in C++

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    18

    Wink EDelegate - Delegate of C# in C++

    EDelegate - Delegate of C# in C++

    Project này mình viết khá lâu rùi, đại khái đặc điểm của project này là tạo ra một đối tượng lưu giữ các hàm cần gọi, rồi khi cần thì call một lượt ra, giống như một array lưu các functionpointer vậy nhưng linh hoạt hơn, dễ sử dụng hơn và khá tương tự như trong C#...

    Example: File Tester.cpp trong project
    Code:
    #include <iostream>
    #include <vector>
    #include "EDelegate.h"   //Trong project luôn, chứa nhân của EDelegate
    #include "Dictionary.h"   //Một loại array do mình làm
    
    using namespace std;
    
    void vFunc1(int i,char c) //Các function dùng để thử nghiệm
    {
    	cout<<"vFunc1:"<<endl;
    	cout<<i<<" ... "<<c<<" ."<<endl;
    	cout<<endl;
    }
    
    void vFunc2(int i,char c)
    {
    	cout<<"vFunc2:"<<endl;
    	cout<<i<<" ... "<<c<<" ."<<endl;
    	cout<<endl;
    }
    
    class ExClass   //Class để thử nghiệm
    {
    public:
    	ExClass() : iM(17){}
    	~ExClass(){}
    
    	void vmFunc(int i,char c)
    	{
    		cout<<"vmFunc:"<<endl;
    		cout<<i<<" ... "<<c<<" ... "<<iM<<" ."<<endl;
    		cout<<endl;
    	}
    
    public:
    	int iM;
    };
    
    class ExThisCaller
    {
    public:
    	ExThisCaller()
    	{
    		//ed += memberFunc(this,&ExThisCaller::exFunc);
    		//ed += thisFunc(&exFunc);
    		ed += thisFunc(exFunc);   //Thêm delegate vào ed với function là hàm member của một class
    	}
    	~ExThisCaller(){}
    
    	void exFunc(int i,char c)
    	{
    		cout<<"exFunc:"<<endl;
    		cout<<i<<" ... "<<c<<" ."<<endl;
    		cout<<endl;
    	}
    
    	void fire()
    	{
    		ed(2,'T');
    	}
    
    private:
    	EDelegate<void,int,char> ed;
    };
    
    class ExEvent   //Tương tự ExThisCaller
    {
    public:
    	ExEvent()
    	{
    		eventClicked += thisFunc(onClicked);
    	}
    	~ExEvent(){}
    
    	void begin()
    	{
    		cout<<"Enter to click the button...";
    		cin.get();
    		clickedCaller();
    	}
    
    	void clickedCaller()
    	{
    		eventClicked(15,'C');
    	}
    
    	void onClicked(int i,char c)
    	{
    		cout<<"onClick:"<<endl;
    		cout<<i<<" ... "<<c<<" ."<<endl;
    		cout<<endl;
    	}
    
    	EDelegate<void,int,char> eventClicked;
    };
    
    void main()   //Phần này khá dễ hiểu
    {
    	EDelegate<void,int,char> ed;
    	ExClass ec;
    	ec.iM = 18;
    
    	//ed.addListener(vFunc1);
    	ed += staticFunc(&vFunc1);
    	
    	//ed.addListener(vFunc2);
    	ed += EDFMakeFunc(&vFunc2);
    	
    	//ed.addListener(&ec,&ExClass::vmFunc);
    	ed += memberFunc(&ec,&ExClass::vmFunc);
    	
    	//ed.fire(1,'R');
    	ed(1,'R');
    
    	cout<<endl;
    
    	ExThisCaller etc;
    	etc.fire();
    
    	cout<<endl;
    
    	ExEvent ev;
    	ev.eventClicked += staticFunc(vFunc2);
    	ev.begin();
    
    	ed.~EDelegate();
    
    	ed(5,'A');
    }

    Các lưu ý:
    + Có nhiều cách để thêm function vào ed như: ed.addListener(&func) ed.addListerner(object,&object::func) ed += staticFunc(&func) ed += memberFunc(object,&object::func) ed += EDFMakeFunc(&func) ed += EDFMakeFunc(object,&object::func)

    + Nếu muốn thêm function của một class mà mình đang viết thì có thể thêm bằng ed += thisFunc(funcOfClassWithoutObjectbefore) như trong ExThisCaller

    Các bạn có thể tham khảo một ít C# code về delegate ở box C# để hiểu thêm về chức năng của delegate.

    Còn về file EDelegate.h và EDelegateFunc.h các bạn không cần quan tâm, nếu có nguyện vọng muốn nghiên cứu thì có thể xem phần tham khảo để nghiên cứu thêm vì mình viết cũng dựa trên nền tảng này...

    Mong các bác cho nhận xét...

    +++++Download: http://www.box.net/shared/z1u3b3vk08
    Đã được chỉnh sửa lần cuối bởi vpdp_pc : 19-01-2008 lúc 06:48 AM. Lý do: Sửa lại link down

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    18

    Phần tham khảo:
    + http://www.codeproject.com/KB/library/acf.aspx (Another C++ Framework)
    + http://www.codeproject.com/KB/cpp/acfdelegate.aspx (ACF delegates)


    Project của mình so với mấy cái trên chỉ là đồ bỏ nhưng có lẽ dễ sử dụng và nghiên cứu cho người muốn tìm hiểu về template (một trong những thế mạnh của C++) với lại cái của mình không xài library BOOST nên khi compile khá nhanh... Mong các bác góp ý

Các đề tài tương tự

  1. Cơ bản Delegate trong lập trình C#
    Gửi bởi Yin Yang trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 11
    Bài viết cuối: 07-11-2012, 01:22 AM
  2. Vấn đề delegate
    Gửi bởi kimdaiphong trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 21-04-2012, 12:10 PM
  3. nhược điểm của việc sử dụng delegate là gì?
    Gửi bởi thuy5789 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 18
    Bài viết cuối: 20-05-2011, 03:01 PM
  4. Có thể tạo được một mảng delegate ?
    Gửi bởi nqthanh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 25-07-2009, 12:24 PM
  5. Về delegate
    Gửi bởi the-misery trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 20-04-2008, 09:58 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn