【发布时间】:2012-12-01 17:57:00
【问题描述】:
在使用模板时是否可以使用 PolyMorphism?
例如,我有一个名为“过滤器”的类,我有许多不同的数据过滤方式/类,因此我根据模板初始化一个对象(在 main 中定义了哪种类型的过滤器)
#include "Filter1.h"
#include "Filter2.h"
template<typename T>
class Filters {
public:
void Filter(vector<double> &vec) {
T type;
type.Filter(vec);
}
};
// class Filter1
class Filter1 {
public:
void Filter(vector<double> &vec) {
// Code for "Filter1"
}
};
// MAIN
int main() {
vector<double> sample; // this is a sample vector
Filters<Filter1> exam1;
exam1.filter(sample);
}
但是,在“Filter2”中,这会起作用,假设我们传递了更多参数:
class Filter2 {
public:
void Filter(vector<double> &vec, double point)
{
// Filter 2
}
};
然后是主要的:
int main()
{
vector<double> sample;
double point = 9;
Filters<Filter2> exam;
exam.Filter(sample, point);
}
这不起作用,因为“过滤器”中的“过滤器”只接受 1 个参数。
我遇到的问题是过滤器接受的参数不同。例如“Filter1”通过一个 2D 向量和一个 double 但此类中的 Filter 方法定义只接受一个 1D 向量。
我在想(理论上)我可以有一个 switch 语句(“T”)来提供初始化不同的类。
任何想法都将不胜感激。
【问题讨论】:
-
Filter可以接受T代替(因为这毕竟是它所需要的),但这可能只是因为你写了一个简单的例子。 -
@LucDanton 我应该更新我的帖子并包含一个更复杂的深入示例吗?