Welcome

首页 / 软件开发 / C++ / 让C++也支持RMI

让C++也支持RMI2010-11-06 vckbase 王树栋由于没有类似java的“反射”机制,标准C++下实现RMI似乎有些困难。为C++程序员所熟悉的Boost库虽然有RCF实现了类似RMI的功能,但RCF本身需依赖于Boost::serlization支持,而serlization需要编译之后方可使用,且有诸多限制。

本文试图通过C++特有的代码复用机制模拟实现具有类似RMI功能的类库,虽然不能完全实现java的RMI功能,但较之以往的C/S模式有了很大改观,且文中涉及很多C++代码复用技术例如模板,纯虚函数,方法对象等,希望对C++初学者有一定的帮助。

作者才疏学浅,如有不当之处还请读者指正。

关键字

RMI,反射,远程方法访问,虚函数,函数对象,默认模板参数,宏替换。

由一个例子说起

以下实现一个简单的客户端与服务器通讯的例子。例子采用传统的C/S模式,内容很简单,客户端通过调用服务器端的方法向服务器发送数据并接收返回值。

为方便起见,下面分客户端与服务器分别介绍实现。

服务器端

步骤1

创建一个类“Calculate”。

class Calculate{
public:
int sum(int a,int b)
{
printf("int类型的sum方法被调用 ");
t1=a;
t2=b;
return (int)(a+b);
}
double sum(double a,double b)
{
printf("double类型的sum方法被调用 ");
t1=a;
t2=b;
return (a+b);
}
int GetInput()
{
int a;
printf("请输入一个整数以便传输至客户端: ");
scanf("%d",&a);
return a;
}
Student GetStudent(Teacher tt)
{//Student ,Teacher 均为自定义类型
student ts;
ts.age=10;
printf("GetStuden方法被调用 teacher 的名称以及年龄为: %s%d ",tt.name,tt.age);
strcpy(ts.name,"StudentJim");
ts.sex=1;
return ts;
}
int t1;
int t2;
};