[問題] 新增object時候,自動新增執行
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
c++11
問題(Question):
我有兩個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. 把a/b/c/d/.. 改成array,同時定義長度等等
然後save_info()裡面改成for-loop
不過因為a/b/c/d/.. 實際上是有意義的名稱
這部分想像上就是要自己另外去修改enum,把index轉成有意義的名稱
這讓這樣呼叫時候就會變成
enum { A_CAR, A_CAT, A_CANADA, A_NUM }
class B {
public:
A A_arr[A_NUM];
void save_info() {
for (int i = 0; i < A_NUM; A++)
A_arr[i].save_info();
}
}
使用時
obj_b.A_arr[A_CAR].func();
2. 另外想法是
a/b/c/d記憶體使用應該是固定且相同的,
是不是有可能利用指標來自動掃位置並執行??
3. 程式執行前,自動執行另一個小程式
掃描B.h來自動修改B.cpp,不過這感覺很多問題
且 save_info()可以能要另外放在一個檔案比較好修改
想問問有沒有其他做法?
--
標題 [笑話] 唐三藏的願望
唐三藏:八戒,你跑兩步給為師看看。
八 戒:師父,你為啥突然想看徒兒跑步?
唐三藏:哎啊!慚愧,為師自幼在寺中長大,既沒吃過豬肉,也沒看過豬跑步。
噓
01/16 21:40,
01/16 21:40
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1591102336.A.E3C.html
→
06/02 21:05,
4年前
, 1F
06/02 21:05, 1F
→
06/02 21:05,
4年前
, 2F
06/02 21:05, 2F
→
06/02 21:19,
4年前
, 3F
06/02 21:19, 3F
→
06/02 21:38,
4年前
, 4F
06/02 21:38, 4F
嘗試改寫
1. 原本的
https://ideone.com/KU94fC
當我要新增變數時,需修改line 34 / 38 / 42
2. 改成使用Array + enum
https://ideone.com/1Q92gH
當我要新增變數時,需修改 line 34 / 43
而 show_all_result 不需要動
3. std::tie() + std::apply()
研究中,目前是不太知道tie要怎麼應用在這裡
目前是朝向tuple + get + apply
----
補,這部分有點玄之又玄,找範例研究中
※ 編輯: ofd168 (59.102.231.161 臺灣), 06/02/2020 23:15:57
→
06/02 23:22,
4年前
, 5F
06/02 23:22, 5F
→
06/02 23:22,
4年前
, 6F
06/02 23:22, 6F
→
06/02 23:23,
4年前
, 7F
06/02 23:23, 7F
喔喔,這個寫法真的不錯,感謝L大
延續我的1+2的話
https://ideone.com/pccF6Y
這樣的話,需要改line 49 / 58
但是優點是,code裡面不用弄成array方式
對我原本的code來說,改動最小,只要修改宣告的地方
其中有發生錯誤,我把
[](const A& a) { a.save(); };
改成
[](A& a) { a.save(); };
錯誤訊息是
error: passing ‘const A’ as ‘this’ argument discards qualifiers
[-fpermissive]
※ 編輯: ofd168 (59.102.231.161 臺灣), 06/02/2020 23:55:36
補充
根據這篇解答
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
→
06/03 00:25,
4年前
, 8F
06/03 00:25, 8F
→
06/03 00:26,
4年前
, 9F
06/03 00:26, 9F
→
06/05 00:25,
4年前
, 10F
06/05 00:25, 10F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 3 篇):