[問題] template class + QList的問題

看板C_and_CPP (C/C++)作者 (su27)時間3年前 (2022/03/30 21:17), 3年前編輯推噓2(2020)
留言22則, 5人參與, 3年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Win 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Qt 問題(Question): Step 1. 宣告一個模板class template <class T> class Class_temp { public: vector<T> Var_Value; }; Step 2. 在主程式創建一個vector vector <Class_temp<void *>> Val_temp_List; Step 3. 用step 1的模板class 創建兩個object Class_temp<int> Area_temp_1; Class_temp<float> Area_temp_2; Step 4. 我想要的結果是如下的功能 可是會報錯 Val_temp_List.push_back(Area_temp_1); Val_temp_List.push_back(Area_temp_2); PS:不見得要加在vector ,QList也行 謝謝 錯誤訊息 error: no matching member function for call to 'push_back' -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.228.53.160 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1648646234.A.8A4.html

03/30 21:22, 3年前 , 1F
你step2怎麼建了一個沒宣告過的Var_temp<>
03/30 21:22, 1F
sorry key錯了 全改成 Class_temp ※ 編輯: su27 (125.228.53.160 臺灣), 03/30/2022 21:31:04

03/30 21:38, 3年前 , 2F
step3沒加;
03/30 21:38, 2F
※ 編輯: su27 (125.228.53.160 臺灣), 03/30/2022 21:41:13

03/30 22:00, 3年前 , 3F
錯誤訊息蠻清楚的了,再想一想,想不出來的話別玩 temp
03/30 22:00, 3F

03/30 22:00, 3年前 , 4F
late 了,不適合你XD
03/30 22:00, 4F
大哥別這樣 救救俺 ※ 編輯: su27 (125.228.53.160 臺灣), 03/30/2022 22:01:52

03/30 22:05, 3年前 , 5F
型別不一樣不能push進去
03/30 22:05, 5F
我有試過 vector <Class_temp<int>> Val_temp_List 可是另一個就加不進去了 ※ 編輯: su27 (125.228.53.160 臺灣), 03/30/2022 22:14:46

03/30 22:26, 3年前 , 6F
你要有一個superclass,vector<superclass>
03/30 22:26, 6F

03/30 22:31, 3年前 , 7F
因為型別不一樣...,現在的 C++ compiler 可以很明確的
03/30 22:31, 7F

03/30 22:31, 3年前 , 8F
告訴你是哪裡的 type 不 match、不能做轉換,換新一點
03/30 22:31, 8F

03/30 22:31, 3年前 , 9F
的 compiler 試試看?std::variant、std::any 可以救你
03/30 22:31, 9F

03/30 22:31, 3年前 , 10F
,不過建議在用之前再想一下是不是真的一定要用這些才
03/30 22:31, 10F

03/30 22:31, 3年前 , 11F
能做到想做的事
03/30 22:31, 11F

03/30 22:34, 3年前 , 12F
用 vector<superclass> 要小心 object slicing 喔~
03/30 22:34, 12F
謝謝

03/30 23:50, 3年前 , 13F
一個觀念: template 不是「一個帶型別參數的 class」
03/30 23:50, 13F

03/30 23:50, 3年前 , 14F
而是「一個可代型別參數用來生成任意多種 class 的模版」
03/30 23:50, 14F

03/30 23:51, 3年前 , 15F
型別參數不同就是不同的 class, 即使它們其他地方都很像
03/30 23:51, 15F

03/30 23:51, 3年前 , 16F
因此你這裡想做的就只是想在一個 vector 裡放入兩種 class
03/30 23:51, 16F

03/30 23:52, 3年前 , 17F
(照你對 template 的理解可能你也想放更多種, 但問題一樣
03/30 23:52, 17F

03/30 23:52, 3年前 , 18F
那些不是同一個 class 而是不同的多種 class)
03/30 23:52, 18F

03/30 23:53, 3年前 , 19F
那要能這樣放的方法有很多種, 這就需要看你的需求了
03/30 23:53, 19F

03/30 23:54, 3年前 , 20F
不過不論哪一種都跟 template 無關
03/30 23:54, 20F
沒錯 我用其他的方法去完成 謝謝

03/31 01:12, 3年前 , 21F
heterogeneous list?
03/31 01:12, 21F

03/31 01:13, 3年前 , 22F
可以看看 std::variant 或 std::any
03/31 01:13, 22F
※ 編輯: su27 (125.228.53.160 臺灣), 03/31/2022 02:20:41
文章代碼(AID): #1YH5XQYa (C_and_CPP)
文章代碼(AID): #1YH5XQYa (C_and_CPP)