[問題] template class + QList的問題

作者: su27 (su27)   2022-03-30 21:17:10
開發平台(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'
作者: nh60211as   2022-03-30 21:22:00
你step2怎麼建了一個沒宣告過的Var_temp<>step3沒加;
作者: Lipraxde (Lipraxde)   2022-03-30 22:00:00
錯誤訊息蠻清楚的了,再想一想,想不出來的話別玩 template 了,不適合你XD
作者: nh60211as   2022-03-30 22:05:00
型別不一樣不能push進去
作者: sunneo (艾斯寇德)   2022-03-30 22:26:00
你要有一個superclass,vector<superclass>
作者: Lipraxde (Lipraxde)   2022-03-30 22:31:00
因為型別不一樣...,現在的 C++ compiler 可以很明確的告訴你是哪裡的 type 不 match、不能做轉換,換新一點的 compiler 試試看?std::variant、std::any 可以救你,不過建議在用之前再想一下是不是真的一定要用這些才能做到想做的事用 vector<superclass> 要小心 object slicing 喔~
作者: LPH66 (-6.2598534e+18f)   2022-03-30 23:50:00
一個觀念: template 不是「一個帶型別參數的 class」而是「一個可代型別參數用來生成任意多種 class 的模版」型別參數不同就是不同的 class, 即使它們其他地方都很像因此你這裡想做的就只是想在一個 vector 裡放入兩種 class(照你對 template 的理解可能你也想放更多種, 但問題一樣那些不是同一個 class 而是不同的多種 class)那要能這樣放的方法有很多種, 這就需要看你的需求了不過不論哪一種都跟 template 無關
作者: CoNsTaR ((const *))   2022-03-31 01:12:00
heterogeneous list?可以看看 std::variant 或 std::any

Links booklink

Contact Us: admin [ a t ] ucptt.com