gpt4 book ai didi

c++ - 具有不同参数的多态性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:28 25 4
gpt4 key购买 nike

是否有可能使用具有不同参数的相同名称的函数进行多态性?

例如,我希望这三个功能成为一个。

virtual bool isValid1(const std::string&) = 0;
virtual bool isValid2(const uint32_t&) = 0;
virtual bool isValid3(const int& num) = 0;

换句话说,我有一个Base A 和三个Derived A 类。我还有 Base B,它包含一个 Base A 类的 vector 和一个 T(模板类型,可以是 stringunit32int) 参数。当我想使用 vector 和参数从 Base B 调用 isValid 函数时(如下所示:isValid(argument)) 我有点卡住了,因为我必须知道之前是否调用 isValid1(string)isValid2(uint32)isValid3(int).

给提问者的一些代码,

template <class T>
class Field
{
public:
void addValidator(BaseValidator* validator) { m_validator.push_back(validator); }
void validate() const { m_validator[0].isValid(m_data);}
private:
std::vector<BaseValidator*> m_validator;
T m_data;
};
  • 我选择多态性,但欢迎使用其他类型的解决方案。
  • 如果问题太短无法理解,请告诉我,以便我可以用不同的方法重写。

最佳答案

您可以 overload成员函数。即使它们是纯虚拟的并且打算被覆盖1:

virtual bool isValid(const std::string&) = 0;
virtual bool isValid(const uint32_t&) = 0;
virtual bool isValid(const int& num) = 0;

现在 isValid(argument) 将进行重载解析并选择要调用的重载(通过动态调度)。唯一潜在的问题是最后两个重载对于某些参数可能同样好,因此重载可能是模棱两可的。但这实际上取决于它被调用时的 T


<子>1 - 这正是visitation是关于,毕竟。

关于c++ - 具有不同参数的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com