【发布时间】:2020-10-29 08:17:25
【问题描述】:
我想创建一个父类,它定义了一个我可以在继承中重写的通用虚函数,并且我想在每个孩子中更改输入类型。我尝试创建一个模板函数,但我发现如果您尝试将其设为虚拟,模板函数将无法编译。我有一个想法,在父类中模板化一个变量,这样就不必在这个变量上使用继承,然后在子类中,使用特定版本的变量在覆盖函数中做一些事情。
class a {
virtual void doSomething() {
//nothing in parent
}
template<typename T>
T input;
template<typename T>
void SetInput(T i) {
this->input = i;
}
};
class b : a {
virtual void doSomething() override {
float test = this->input;
}
};
class c : a {
virtual void doSomething() override {
char test = this->input;
}
};
class d : a {
virtual void doSomething() override {
int test = this->input;
}
};
void main(){
std::vector<a> allNodes(3);
b t1;
t1.SetInput<float>(41.5f);
c t2;
t2.SetInput<char>('b');
d t3;
t3.SetInput<int>(3);
allNodes[0] = t1;
allNodes[1] = t2;
allNodes[2] = t3;
for (a node : allNodes) {
node.doSomething();
}
}
但是从现在开始,这个想法不再编译了,因为它告诉我需要在father中,在SetInput()函数中定义模板的类型,当我要设置它时。
如果你有什么想法,请告诉我。谢谢
【问题讨论】:
-
您是否希望
char test = this->input;生成input类型的char以及其他类似的类型? -
我希望有一种通用的方式来调用基本方法和创建多个不同输入类型的子类的可能性,并且只需要一个调用就可以做出特定的事情
标签: c++ templates inheritance polymorphism c++17