我想将指向 Base
类的指针存储在 vector
中,然后将它们用作函数参数,它们充当特定类,请参见此处:
#include <iostream>
#include <vector>
class Base {};
template<class T>
class Derived : public Base {};
void Foo(Derived<int>* d) {
std::cerr << "Processing int" << std::endl;
}
void Foo(Derived<double>* d) {
std::cerr << "Processing double" << std::endl;
}
int main() {
std::vector<Base*> vec;
vec.push_back(new Derived<int>());
vec.push_back(new Derived<double>());
Foo(vec[0]);
Foo(vec[1]);
delete vec[0];
delete vec[1];
return 0;
}
这不编译:
error: call of overloaded 'Foo(Base*&)' is ambiguous
有可能让它发挥作用吗?我需要根据 vector 的 int、double 等类型以不同方式处理 vector 的元素。
最佳答案
您需要使用方法多态性,因为它是动态的,而不是函数重载,后者是静态的(编译时)。要重载模板化类型,您需要使用模板特化。
例子:
#include <iostream>
#include <vector>
class Base {
public:
virtual void Foo() {
std::cerr << "Processing base" << std::endl;
}
};
template<class T>
class Derived : public Base {};
template <>
class Derived <int> : public Base {
public:
void Foo() {
std::cerr << "Processing int" << std::endl;
}
};
template <>
class Derived <double> : public Base {
public:
void Foo() {
std::cerr << "Processing double" << std::endl;
}
};
int main() {
std::vector<Base*> vec;
vec.push_back(new Derived<int>());
vec.push_back(new Derived<double>());
vec[0]->Foo();
vec[1]->Foo();
delete vec[0];
delete vec[1];
return 0;
}
关于c++ - 如何将 Base* 指针视为 Derived<T>* 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660276/