c中struct 向 cpp class的转变

wkkevin 2003-08-23 11:01:08
#include<stdio.h>
#define Class(s) Class s = constructor();

struct clsStruct
{
int value;

void (*setValue)(struct clsStruct *, int);
int (*toValue)(struct clsStruct *);
};
typedef struct clsStruct Class;

void setValue(Class *s, int v)
{
s->value = v;
}

int toValue(Class *s)
{
return (s->value);
}

Class constructor()
{
Class s;

s.setValue = setValue;
s.toValue = toValue;

return s;
}

int main()
{
//Class s = constructor();
Class(s);

s.setValue(&s, 100);
printf("%d", s.toValue(&s));

return 1;
}
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wkkevin 2003-09-12
  • 打赏
  • 举报
回复
我晕,其实没有多大的探讨价值,只是觉得好玩而已。
毕竟c++是集大成者,simular, smarttalk,c只是他的基础
怎么能用c去解释c++呢。
wkkevin 2003-09-12
  • 打赏
  • 举报
回复
发现错误了,2nd

#include<stdio.h>
#define Class(s) Class s; constructor(&s);
^^^^^^^^^^^^^^^^^^^^^^^^
struct clsStruct
{
int value;

void (*setValue)(struct clsStruct *, int);
int (*toValue)(struct clsStruct *);
};
typedef struct clsStruct Class;

void setValue(Class *s, int v)
{
s->value = v;
}

int toValue(Class *s)
{
return (s->value);
}

//revised constructor
void constructor(Class* s)
{
s->setValue = setValue;
s->toValue = toValue;
}

int main()
{
//Class s = constructor();
Class(s);

s.setValue(&s, 100);
printf("%d", s.toValue(&s));

return 0;
}
Wolf0403 2003-09-12
  • 打赏
  • 举报
回复
呵呵,好玩而已嘛。我做了个宏替换的实现 "New" 初始化“类”的模型
#include <stdio.h>
#include <stdlib.h>

#define Class(X) typedef struct {
#define End_Class(X) } X;
#define CLASS_TYPE a
#define CLASS_TYPE_PTR a *

Class (a)
int intValue;
End_Class (a)
void ConsA (void *pA)
{
((a*)pA)->intValue = 1;
}

typedef void (*Constructor)(void*);

CLASS_TYPE_PTR New (Constructor c)
{
CLASS_TYPE_PTR p = (CLASS_TYPE_PTR)malloc(sizeof(CLASS_TYPE));
(*c)(p);
return p;
}

int main()
{
a * pC = New(&ConsA);
printf("%d\n", pC->intValue);
system("PAUSE");
return 0;
}
把 CLASS_TYPE 和 CLASS_TYPE_PTR 改改就 OK。
难题是,C 的 struct 不能包含函数:(
oopig 2003-08-24
  • 打赏
  • 举报
回复
写错了一个地方
>>void setValue)(int);
应该是void setValue(int);
oopig 2003-08-24
  • 打赏
  • 举报
回复
class Struct
{
private:
int value;
public:
void setValue)(int);
int toValue();
};

void Struct::setValue(int v)
{
value = v;
}

int Struct::toValue()
{
return value;
}
Healer 2003-08-23
  • 打赏
  • 举报
回复
形式不是很重要了, 你要包装C++啊??
佩服死了,

VC的话, 有 ##宏, 可以试验一下。
wkkevin 2003-08-23
  • 打赏
  • 举报
回复
怎样能把Class(s)替换成 Class s形式呢?

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧