作者godfat (godfat 真常)
看板C_and_CPP
标题[情报] Java Style Classes in C++
时间Sat Feb 18 23:46:32 2006
http://strlen.com/rants/javaclassesincpp.html
在 comp.lang.c++.moderated 中 thread
Proposal: Making C++ more like Java 找到的
我觉得是个很有趣的编译架构法,不知道各位有没有什麽想法
我个人实在是痛恶 C++ 继承自 C 的 include 机制...
textual include 确实是解决了一些问题,但同时也带出一堆的问题...
该如何在现有情况中找到最佳的解法呢…?
利用 C++ 在 class/struct 内可以不用前置宣告的机制,
该文设计出了一种类似 Java 的机制,使各个 class 之间的可视性
不再藉由 include 顺序而改变,使得所谓循环依存的问题消失
我个人是认为有好有坏,没有实际试过我不太能想像会有什麽问题
只是在 C++ 中,这种 tricky 的手法还真是层出不穷啊...
请看他文章里的 code, 引用如下
[quote]
#include "stdafx.h"
#include "containers.h"
#include "linalg.h"
struct engine
{
#include "scriptobj.h"
#include "scriptcfg.h"
#include "camera.h"
#include "cmaloader.h"
#include "gamestat.h"
#include "game.h"
#include "particles.h"
#include "d3dmeshrt.h"
#include "d3drenderer.h"
#include "system.h"
static System _g;
};
engine::System engine::_g;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, char *args, int)
{
engine::_g.Main(args);
};
[/quote]
在每一个 .h 中,作者写下了所有的 implement
不用 include 任何档就可以看到任何的其他 class
因为他们全部都是在一个大 class 中
虽然这麽做好像反而把 interface 和 implement 挤成一团
但是稍微做一点变化也是可以把 class definition 和 implement 分开
// Game.h
class Game{
public:
void start();
void pause();
void abort();
private:
/* blah blah blah */
};
// Game.hpp
#include "Game.h"
void Game::start(){ /*blah blah blah*/ }
void Game::pause(){ /*blah blah blah*/ }
void Game::abort(){ /*blah blah blah*/ }
// All.cpp
struct Enigine{
#include "Game.hpp"
};
感觉是个满有趣的手法,也许可以拿来跟 Herb Sutter 的 pimpl 来比较
--
有错望请指正,谢谢
--
By Gamers, For Gamers - from the past Interplay
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.210.113
1F:推 drkkimo:我觉得蛮怪的写法耶… 这样写其他人维护的时候可能有疑虑 02/19 09:49
2F:推 godfat:是满怪的,不过如果说疑虑的话,我觉得这是沟通问题了 02/19 10:17
3F:→ godfat:我是不清楚这样做是否好,但我想应该不会太难理解y 02/19 10:18
4F:推 drkkimo:如果.h里面有namespace 或样版 会不会有问题呀? 02/19 11:27
5F:推 godfat:老实讲我不知道 XDD template 应该没问题. 如果要这样做, 02/19 11:37
6F:→ godfat:我想事先就要规划,多少会有一些限制的,毕竟都是trade off 02/19 11:38
7F:推 cplusplus:不知道效率怎麽样呢?? 如果底层还是呼叫C++的原始func 02/19 17:52
8F:推 cplusplus:每个功能都可能有额外的负担 不知道是怎麽实做的? 02/19 17:54
9F:推 cplusplus:哦 我搞错意思了! 不好意思 orz 我以为是....orz 02/19 18:00
10F:→ cplusplus:这样其实还蛮蛮有趣的 :P 02/19 18:01
11F:→ godfat:害我还在想 preprocessing 的效率…? XD 02/19 18:39