【发布时间】:2022-08-16 23:34:44
【问题描述】:
假设下面的sn-p。我怎样才能使这个编译/工作?我不想将print 移动到String/Float 类,因为在我的实际情况下,这个函数结合了很多数据。
所以基本上我想要一个指向“任何类型(在这种情况下为字符串/浮点数)”的指针/成员,然后使用它,并动态调用其他东西(在这种情况下print)?
我认为这不起作用(除其他外),因为它无法在编译时确定 T 的 ptr 将在编译时具有哪种类型。
解决此类问题的一般模式是什么?
#include <iostream>
template<typename T>
class AbstractClass {
virtual T getValue()=0;
};
class StringClass : public AbstractClass<std::string> {
std::string getValue() override {
return \"A\";
}
};
class FloatClass : public AbstractClass<float> {
float getValue() override {
return 1;
}
};
class Processor {
public:
AbstractClass<T>* ptr;
void doIt() {
ptr=new StringClass();
print(ptr->getValue());
delete ptr;
ptr=new FloatClass();
print(ptr->getValue());
delete ptr;
}
void print(std::string i) {
std::cout << \"String \"<<i<<std::endl;
}
void print(float i) {
std::cout << \"Float \"<<i<<std::endl;
}
}
int main() {
Processor a;
a.doIt();
}
-
抱歉,但 C++ 在基本层面上根本无法以这种方式工作。
-
你不能写
AbstractClass<T>而不指定T是什么。但是,您可以使用std::any或std::variant<>和std::visit。 -
将打印纯虚成员函数添加到抽象类并在每个派生类中实现它。