青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

qiezi的學習園地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首頁 :: 新隨筆 ::  ::  :: 管理 ::
C++ 0x keynote(以下簡稱0x)中描述了這樣一個看起來不錯的東西:

1、本地調用代碼:
// use local object: 
X x; 
A a; 
std::string s("abc"); 
// … 
x.f(a, s); 
2、使用遠程代理wrapper層:
// use remote object : 
proxy<X> x; 
x.connect("my_host"); 
A a; 
std::string s("abc"); 
// … 
x.f(a, s); 


僅使用一個包裝層就完成遠程調用?從目前的C++來看基本上不可能。 今天突然想到可以使用aspect c++來生成代碼,因為aspect c++在生成代碼時,也生成了一些簡單的元信息,可以在函數里面取得函數的原型、各參數的類型等。 根據0x的描述,我編寫了簡單的測試代碼:

#include <string>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

class LoginService
{
public:
	virtual bool login (const string& name, const string& password, string& session) = 0;
	virtual void logout (const string& session) = 0;
};

class RemoteCall
{
public:
	bool connect (const char* host, unsigned short port)
	{
		cout << "connect success" << endl;
		return true;
	}
	bool send (const char* p, size_t len)
	{
		cout << "send: " << endl;
		cout << string(p, len) << endl;
		return true;
	}
	bool recv(char* p, size_t len)
	{
		return true;
	}
};

class RemoteLoginService : public LoginService, public RemoteCall
{
public:
	virtual bool login (const string& name, const string& password, string& session)
	{
		return false;
	}
	virtual void logout (const string& session)
	{
	}
};

int main(int argc, char *argv[])
{
	RemoteLoginService rls;
	rls.connect("localhost", 3957);
	string session;
	rls.login("lijie", "lijie", session);
	rls.logout(session);
	
	return 0;
}

現在的目標是加入一個方面,讓RemoteLoginService具有遠程調用功能。當然由于此處RemoteCall并未實現,所以只要能夠把這個調用正確序列化就算完成目標。 這個方面完成后如下:
aspect Remote
{
	pointcut remote_class() = "RemoteCall";
	pointcut remote_call() = derived(remote_class()) && !remote_class();

	pointcut virtual_methods() = "% ...::%(...)";

	advice within(remote_call()) && execution(virtual_methods()): before(){
		stringstream ss;
		ss << "\tcall:" << JoinPoint::signature() << endl;
		ss << "\targuments:";
		for (size_t i=0; i<JoinPoint::args(); ++i)
		{
			string arg(tjp->argtype(i));
			if (arg.find("basic_string") != arg.npos)
			{
				ss << *(string*)tjp->arg(i) << "|";
			}
		}
		string send_str = ss.str();
		tjp->target()->send (send_str.c_str(), send_str.size());
	}

	advice within(remote_call()) && execution(virtual_methods()): after(){
		vector<char> buffer(1024, '\0');
		tjp->target()->recv (&(*buffer.begin()), buffer.size());
		// 解析接收的數據,遠程調用結果寫入tjp->result()指向的內存
	}
};

它匹配所有從RemoteCall上派生的類,為它的每個方法加入遠程調用代碼以及調用結果處理代碼。 生成并編譯運行,輸出如下:
connect success
send:
        call:bool RemoteLoginService::login(const ::std::basic_string< char > &,const ::std::basic_string< char > &,::std::basic_string< char > &)
        arguments:lijie|lijie||
send:
        call:void RemoteLoginService::logout(const ::std::basic_string< char > &)
        arguments:|

由于完整序列化了各個參數值,第一個目標——生成遠程調用代碼——算是完成了。

下一個目標,考慮服務端如何編寫?服務端需要開啟一個服務,并注冊各個服務接口。

要達到這個目標,aspect c++需要提供類、方法級別的類型及名稱獲取,不過aspect c++在這方面沒有提供更多方便,現在只能在方法執行時獲得方法的信息,它所生成的“元信息”過于簡單,而且為了效率考慮都實現為各個獨立的結構,結構的成員也大都是static的,所以無法使用一個合適的接口來反射,期待以后能加入這些特性。

所以這第2個目標實際上無法簡單地完成,除非在服務端手工添加服務注冊代碼,這個部分工作量稍小,但還是可以做到的。
posted on 2005-12-19 22:50 qiezi 閱讀(1363) 評論(9)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜宅男久久久| 99热这里只有成人精品国产| 午夜电影亚洲| 国产精品另类一区| 亚洲欧美国产高清va在线播| 久久精品日产第一区二区| 国内成+人亚洲| 久久综合久久综合九色| 久久一区视频| 亚洲级视频在线观看免费1级| 欧美二区在线观看| 这里只有精品丝袜| 久久综合精品一区| 日韩视频在线永久播放| 国产精品亚洲成人| 久久精品一二三区| 亚洲激情午夜| 亚洲欧美视频一区二区三区| 一区二区三区在线视频播放| 欧美国产日韩二区| 亚洲欧美日本国产专区一区| 麻豆成人小视频| 亚洲一卡二卡三卡四卡五卡| 国产一区二区三区高清| 欧美激情第4页| 亚洲欧美在线磁力| 亚洲经典一区| 亚洲精品国产精品国自产观看浪潮| 亚洲综合精品四区| 久久蜜臀精品av| 99亚洲视频| 国产深夜精品| 欧美成人一区二区在线| 午夜在线视频观看日韩17c| 亚洲黄一区二区三区| 久久久久99精品国产片| 中文欧美在线视频| 又紧又大又爽精品一区二区| 国产精品久99| 噜噜噜噜噜久久久久久91| 亚洲视频在线一区| 91久久在线| 久久久爽爽爽美女图片| 亚洲在线免费| 一本色道久久综合狠狠躁的推荐| 黄色国产精品一区二区三区| 国产精品劲爆视频| 欧美日韩国产影院| 欧美**人妖| 久久亚洲综合网| 欧美在线不卡| 亚洲欧美日本另类| 亚洲图片欧洲图片av| 亚洲日本成人在线观看| 欧美大片免费观看在线观看网站推荐| 欧美专区在线| 亚洲一区久久久| 亚洲免费观看高清完整版在线观看熊| 在线电影一区| 激情综合自拍| 激情综合网址| 在线欧美电影| 尤物yw午夜国产精品视频| 海角社区69精品视频| 国产性色一区二区| 国产日韩欧美一区二区| 国产精品免费观看在线| 国产精品高潮呻吟视频| 欧美日韩中文在线| 欧美区视频在线观看| 欧美精品18+| 欧美日本国产一区| 欧美女同视频| 欧美日本网站| 欧美日韩在线三区| 国产精品久久久久久模特| 欧美视频一区二区在线观看 | 欧美成在线视频| 美女亚洲精品| 欧美激情精品久久久| 亚洲高清色综合| 亚洲精品综合久久中文字幕| 亚洲精品久久久久久久久久久久| 亚洲毛片在线观看.| 一本色道久久综合狠狠躁篇怎么玩| 日韩图片一区| 亚洲欧美日本国产专区一区| 欧美在线视频日韩| 久热re这里精品视频在线6| 欧美成人免费播放| 欧美日韩综合| 国产视频观看一区| 亚洲国产精品va在看黑人| 91久久线看在观草草青青| 亚洲乱码国产乱码精品精可以看| 亚洲精品五月天| 亚洲视频www| 亚洲女人小视频在线观看| 欧美自拍偷拍午夜视频| 牛人盗摄一区二区三区视频| 91久久精品国产91性色tv| 一本色道久久综合一区| 久久高清国产| 欧美日韩的一区二区| 国产精品日韩在线一区| 一区二区三区在线免费视频| 亚洲电影免费在线| 亚洲午夜精品久久| 久久美女性网| 亚洲日韩欧美视频| 性色av一区二区怡红| 欧美成人在线免费视频| 国产精品一级| 亚洲国产三级在线| 午夜在线一区| 亚洲高清激情| 午夜亚洲影视| 欧美日韩另类字幕中文| 激情亚洲一区二区三区四区| 亚洲五月六月| 亚洲丁香婷深爱综合| 午夜精品久久久久久久久| 欧美成人午夜剧场免费观看| 国产免费成人在线视频| 99视频在线观看一区三区| 久久资源av| 亚洲淫性视频| 欧美日韩黄色一区二区| 在线观看的日韩av| 先锋影音国产精品| 亚洲精品少妇| 久久综合九九| 国产一区二区三区高清在线观看| 亚洲天堂视频在线观看| 亚洲第一区在线观看| 久久成人国产精品| 国产精品一区二区欧美| 中文成人激情娱乐网| 久久综合亚洲社区| 亚洲免费在线观看| 欧美日韩国产二区| 亚洲国产福利在线| 久久免费的精品国产v∧| 亚洲性av在线| 欧美性事在线| 在线视频欧美日韩精品| 亚洲国产精品一区二区尤物区 | 亚洲在线成人| 亚洲日本精品国产第一区| 久久免费视频观看| 国自产拍偷拍福利精品免费一| 欧美一级久久久| 亚洲午夜小视频| 欧美视频日韩| 一区二区三区视频在线观看| 最新亚洲激情| 欧美成人久久| 亚洲日本在线观看| 亚洲国产精彩中文乱码av在线播放| 久久精品在线播放| 在线观看欧美| 欧美成年人网| 欧美成人首页| 亚洲视频在线一区观看| 新狼窝色av性久久久久久| 久久国产精品久久久| 久久久久久久精| 麻豆成人综合网| 国产精品美女久久| 亚洲第一精品在线| 先锋影音久久久| 欧美精品一区视频| 欧美成人综合在线| 亚洲国产婷婷香蕉久久久久久| 免费不卡欧美自拍视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 蜜桃伊人久久| 国产精品美女久久久久av超清| 在线观看亚洲精品视频| 欧美在线视频导航| 欧美亚洲在线观看| 国产欧美一区二区三区久久人妖 | 夜夜精品视频一区二区| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲欧美视频一区二区三区| 亚洲欧美文学| 黄网站色欧美视频| 欧美国产日产韩国视频| 欧美精品一区二区精品网 | 亚洲成人在线视频播放 | 久久九九国产精品| 久久久99免费视频| 亚洲精品一区二| 日韩视频免费| 国产精品一二三视频| 久热爱精品视频线路一| 欧美国产日韩xxxxx| 香蕉成人伊视频在线观看 | 黑人操亚洲美女惩罚| 亚洲国产精品电影在线观看|