[情報] Java Style Classes in C++

看板C_and_CPP (C/C++)作者 (godfat 真常)時間19年前 (2006/02/18 23:26), 編輯推噓7(704)
留言11則, 3人參與, 最新討論串1/1
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

02/19 09:49, , 1F
我覺得蠻怪的寫法耶… 這樣寫其他人維護的時候可能有疑慮
02/19 09:49, 1F

02/19 10:17, , 2F
是滿怪的,不過如果說疑慮的話,我覺得這是溝通問題了
02/19 10:17, 2F

02/19 10:18, , 3F
我是不清楚這樣做是否好,但我想應該不會太難理解y
02/19 10:18, 3F

02/19 11:27, , 4F
如果.h裡面有namespace 或樣版 會不會有問題呀? 
02/19 11:27, 4F

02/19 11:37, , 5F
老實講我不知道 XDD template 應該沒問題. 如果要這樣做,
02/19 11:37, 5F

02/19 11:38, , 6F
我想事先就要規劃,多少會有一些限制的,畢竟都是trade off
02/19 11:38, 6F

02/19 17:52, , 7F
不知道效率怎麼樣呢?? 如果底層還是呼叫C++的原始func
02/19 17:52, 7F

02/19 17:54, , 8F
每個功能都可能有額外的負擔 不知道是怎麼實做的?
02/19 17:54, 8F

02/19 18:00, , 9F
哦 我搞錯意思了! 不好意思 orz 我以為是....orz
02/19 18:00, 9F

02/19 18:01, , 10F
這樣其實還蠻蠻有趣的 :P
02/19 18:01, 10F

02/19 18:39, , 11F
害我還在想 preprocessing 的效率…? XD
02/19 18:39, 11F
文章代碼(AID): #13zpopb6 (C_and_CPP)
文章代碼(AID): #13zpopb6 (C_and_CPP)