PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] 新增object時候,自動新增執行
作者:
ofd168
(大色狼來襲)
2020-06-02 20:52:12
開發平台(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()可以能要另外放在一個檔案比較好修改
想問問有沒有其他做法?
作者: changhua5566
2019-01-16 21:40:00
我想你也沒被豬噓過
作者:
loveme00835
(髮箍)
2020-06-02 21:05:00
std::tie() + std::apply() 試試, 要更簡潔的話需要用 preprocessor 展開沒看到 void main() xD 你的 VC 是什麼版本?
作者:
ofd168
(大色狼來襲)
2020-06-02 21:38:00
也許是int ,我舉例子XD
作者:
loveme00835
(髮箍)
2020-06-02 23:22:00
像這樣用 variadic template 遞迴展開即可
https://wandbox.org/permlink/MG8AZu2MVTYoRa5W
後來想想 <utility> 沒有現成工具也不打緊你要的是 pointer to member function, 不過那也要你先取得每個物件的位址才行
作者:
kingofsdtw
(ä¸èƒ½é–’下來!!)
2020-06-05 00:25:00
http://lars.ruoff.free.fr/xmlcpp/
?
繼續閱讀
[問題] C++ SLT map<struct*,int> 的行為??
s89162504
[問題] IEEE 754 浮點數運算以及rounding請益
ayn775437403
[問題] 做到讀取和繪製shapefile或tiff檔的視窗
e25820
[閒聊] CompilerDev編譯器開發 新版連署
mshockwave
[問題] SerialPort讀取長度
getaway
[問題] main()和main(void)的差別
pandaren0905
[問題] 不能無法用malloc初始化物件
ericerix
Re: [問題] MFC的滑鼠事件
enthos
[問題] MFC的滑鼠事件
student23489
請問namespace前的雙冒號
butterflyred
Links
booklink
Contact Us: admin [ a t ] ucptt.com