噓 changhua5566:我想你也沒被豬噓過01/16 21:40
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.204.170 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1591102336.A.E3C.html
→ loveme00835: std::tie() + std::apply() 試試, 要更簡潔的話需要 06/02 21:05
→ loveme00835: 用 preprocessor 展開 06/02 21:05
→ loveme00835: 沒看到 void main() xD 你的 VC 是什麼版本? 06/02 21:19
→ ofd168: 也許是int ,我舉例子XD 06/02 21:38
嘗試改寫
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
→ loveme00835: 像這樣用 variadic template 遞迴展開即可 06/02 23:22
→ loveme00835: 後來想想 <utility> 沒有現成工具也不打緊 06/02 23:23
喔喔,這個寫法真的不錯,感謝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
→ loveme00835: 你要的是 pointer to member function, 不過那也要你 06/03 00:25
→ loveme00835: 先取得每個物件的位址才行 06/03 00:26