[问题] 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