Polymorphism with different parameters

Isa*_*aan 5 c++

By any chance is it possible to do polymorphism with the same name of function with different parameters?

For example, I want those three functions to become one.

virtual bool isValid1(const std::string&) = 0;
virtual bool isValid2(const uint32_t&) = 0;
virtual bool isValid3(const int& num) = 0;
Run Code Online (Sandbox Code Playgroud)

换句话说,我有一个Base A和三个Derived A类。我也有基本B保持基质A类和T的矢量(模板类型,可以是一个stringunit32int)参数。当我想从基地调用BisValid使用功能vector和参数(这样的: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;
};
Run Code Online (Sandbox Code Playgroud)
  • 我选择多态,但也欢迎其他类型的解决方案。
  • 如果问题太短而无法理解,请告诉我,因此我可以用其他方法重写。

Sto*_*ica 6

您可以重载成员函数。即使它们是纯虚拟的并且应该被覆盖1

virtual bool isValid(const std::string&) = 0;
virtual bool isValid(const uint32_t&) = 0;
virtual bool isValid(const int& num) = 0;
Run Code Online (Sandbox Code Playgroud)

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


1-毕竟这就是探访的意义