Ahm*_*aya -2 c++ oop templates vector c++11
我正在尝试根据模板类型T传递的类来运行不同的代码.
我有2个班级:Media和Customer.
我有一个模板T和一个功能add(T type).
我希望它能够有效地识别传递哪个类T,并将该类型添加到数组中,如下所示.
template <typename T>
void add(T type){
if(type = Customer) { // This is pseudo code of what I want it to do
allCustomers.push_back(type);
cout << "Added Successfully";
}
else if (type = Media){
allMedia.push_back(type);
cout << "Added Successfully";
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图传递它的方式:
add(Media("test","test"));
Run Code Online (Sandbox Code Playgroud)
如果您有两种已知类型,则无需将其设为模板.
你可以拥有:
void add( Customer c );
void add( Media m );
Run Code Online (Sandbox Code Playgroud)
if() else if()您的代码中的语句存在问题
allCustomers.push_back(type);
Run Code Online (Sandbox Code Playgroud)
会给你一个类型的编译器错误Media(假设allCustomers是a std::vector<Customer>),反之亦然类型Customer和
allMedia.push_back(type);
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用函数重载来执行此操作:
void add(const Customer& type){
allCustomers.push_back(type);
cout << "Added Successfully";
}
void add(const Media& type){
allMedia.push_back(type);
cout << "Added Successfully";
}
Run Code Online (Sandbox Code Playgroud)
如果您有其他类型的通用模板实现Customer,Media您也可以使用模板专业化:
template<typename T>
void add(const T& type){
anyTypes.push_back(type);
cout << "Added Successfully";
}
template<>
void add(const Customer& type){
allCustomers.push_back(type);
cout << "Added Successfully";
}
template<>
void add(const Media& type){
allMedia.push_back(type);
cout << "Added Successfully";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |