我想在 c++14 上实现类似的东西,基本上派生类可以有不同类型的返回类型(例如 int、double、string 等)
class Base {
public:
virtual auto value() = 0; // I know this won't compile
};
class Derived1 : public Base {
public:
double value() override {
return 1.0;
};
};
class Derived2 : public Base {
public:
int value() override {
return 1;
};
};
我知道上面的代码不会编译,但我正在尝试使用任何可能的方式或模式来实现类似的东西(我尝试过模板、CRTP、访问者,但没有什么能满足我的以下代码)
Derived1 d1;
Derived2 d2;
std::vector<Base*> base = {&d1, &d2);
for (const auto* b : base) {
std::cout << b->value();
}
我能用模板得到的最好的东西是
Derived1 d1;
Derived2 d2;
std::vector<Base*> base = {&d1, &d2);
for (const auto* b : base) {
if (dynamic_cast<Derived1>(b)) {
std::cout << b->value<double>();
} else if (dynamic_cast<Derived2>(b)) {
std::cout << b->value<int>();
}
}
但是如果我有 100 种派生类,它看起来就不会那么漂亮了:D