【发布时间】:2020-05-05 05:29:07
【问题描述】:
class Distribution
{
public:
virtual type GenerateRandomNumber() = 0;
};
在 Distribution 类中,有一个函数,派生类必须重写它。
其中一个派生类返回double,另一个返回unsigned int。
class Gamma : public Distribution
{
public:
double GenerateRandomNumber() override;
};
class Poisson : public Distribution
{
public:
unsigned int GenerateRandomNumber() override;
};
我尝试将auto 作为基类中GenerateRandomNumber() 的返回类型,但不能同时使用自动和虚拟。
Base 类中的返回类型应该是什么?
【问题讨论】:
-
然后将 Temple 作为返回类型
-
不能那样做。函数签名必须匹配。如果您对它们进行模板化,则需要对基类进行模板化,并且通常情况不会更好,因为基类型不匹配。如果您的编译器是最新的,您可以返回
std::variant。就个人而言,我认为你可能会进入一个糟糕的地方。见Liskov Substitution Principle