Re: [問題] 新增object時候,自動新增執行

看板C_and_CPP (C/C++)作者時間5年前 (2020/06/17 17:07), 5年前編輯推噓1(105)
留言6則, 3人參與, 5年前最新討論串2/3 (看更多)
※ 引述《ofd168 ()》之銘言: : 我有兩個class,分別是A和B : : 其中 : class B { : public: : A a; : A b; : : void save_info() { : a.save(); : b.save(); : } : } : : void main() { : B obj_b; : : .... : : obj_b.save_info(); : } : : : : : 如果我要多一個c : : class B { : public: : A a; : A b; : A c; : : void save_info() { : a.save(); : b.save(); : c.save(); : } : } : : : : 如果我想新增d/e/f/... : 勢必就要改code : : 想說有沒有辦法比較聰明的方法修改save_info : : : : : : 1. 原本的 : https://ideone.com/KU94fC : : 當我要新增變數時,需修改line 34 / 38 / 42 : : : : 2. 改成使用Array + enum : https://ideone.com/1Q92gH : : 當我要新增變數時,需修改 line 34 / 43 : : 而 show_all_result 不需要動 : : : : → loveme00835: 像這樣用 variadic template 遞迴展開即可 06/02 23:22 : → loveme00835: https://wandbox.org/permlink/MG8AZu2MVTYoRa5W 06/02 23:22 : → loveme00835: 後來想想 <utility> 沒有現成工具也不打緊 06/02 23:23 : : 喔喔,這個寫法真的不錯,感謝L大 : : 延續我的1+2的話 : : https://ideone.com/pccF6Y : : 這樣的話,需要改line 49 / 58 : : 但是優點是,code裡面不用弄成array方式 : : 對我原本的code來說,改動最小,只要修改宣告的地方 : : : 補充 : : 根據這篇解答 : : : https://stackoverflow.com/questions/46190709/address-of-a-method-of-an-objec : t-in-c : : 縮網址 : https://tinyurl.com/yckgwa42 : : 原本想說c++有可以類似function pointer的東西 : : 想說能不能類似使用 : : (func_ptr + obj_size) 直接切到下一個obj的function使用 : : : 但這篇有說明 : : 有些編譯器為了節省空間,會將實作的member function使用同一份 : : 也就是說,就算知道function address, : 也沒辦法透過調整指標位置直接執行另一個object的function : ※ 編輯: ofd168 (59.102.231.161 臺灣), 06/03/2020 00:19:09 : → loveme00835: 你要的是 pointer to member function, 不過那也要你 06/03 00:25 : → loveme00835: 先取得每個物件的位址才行 06/03 00:26 : → kingofsdtw: http://lars.ruoff.free.fr/xmlcpp/ ? 06/05 00:25 補一個另一種做法 利用static member variable + constructor https://ideone.com/z87uYQ 概念上就是弄一個static vector<A*> A_vector; 因為是static,所以每個A的object都看的到 然後再constructor的時候,都要丟給A_vector自己的位置 所以就可以得到love大說的 先取得每個物件的位址才行 在class B就可以簡單的 void show_all_result() { for (int i = 0; i < A::A_vector.size(); i++) A::A_vector[i]->show_result(); } 感覺起來像是方法2的變形 -- 標題 [笑話] 唐三藏的願望 唐三藏:八戒,你跑兩步給為師看看。 八 戒:師父,你為啥突然想看徒兒跑步? 唐三藏:哎啊!慚愧,為師自幼在寺中長大,既沒吃過豬肉,也沒看過豬跑步。

01/16 21:40,
我想你也沒被豬噓過
01/16 21:40
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1592384840.A.9CF.html ※ 編輯: ofd168 (60.250.204.170 臺灣), 06/17/2020 17:08:29

06/17 18:45, 5年前 , 1F
多宣告一個 B 的變數就破功了QQ
06/17 18:45, 1F
修改一下 https://ideone.com/jIymbX 遇到跟這篇一樣的問題 Double initialization of a static STL container in a C++ library https://tinyurl.com/yaa66p25 概念上就是 global variable的initialize順序不可控 會遇到用的爽爽的,結果stl container做初始化,結果東西都不見 所以要另外用成function的方式,當function被呼叫時候,就會被初始化 ------- 另外再宣告一個B會破功 目前只想到initialize時候把A_vector移到class B, 然後當作A constructor輸入參數 Orz ※ 編輯: ofd168 (60.250.204.170 臺灣), 06/17/2020 20:11:22

06/17 20:49, 5年前 , 2F
發展方向愈來愈奇怪惹 :o
06/17 20:49, 2F

06/17 21:00, 5年前 , 3F
這樣寫 code 人生會越來越複雜的
06/17 21:00, 3F
QQ 大大們求救,拯救我的人生 ※ 編輯: ofd168 (60.250.204.170 臺灣), 06/18/2020 11:15:03

06/18 18:14, 5年前 , 4F
為什麼變數個數會需要一直改?而且你說每個變數是有
06/18 18:14, 4F

06/18 18:14, 5年前 , 5F
意義的,那會需要對不同的變數做不同的操作嗎?如果
06/18 18:14, 5F

06/18 18:14, 5年前 , 6F
不會的話,弄成config檔讓程式吃進去比較簡單吧
06/18 18:14, 6F
文章代碼(AID): #1UwTr8dF (C_and_CPP)
文章代碼(AID): #1UwTr8dF (C_and_CPP)