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的矢量(模板类型,可以是一个string,unit32或int)参数。当我想从基地调用B的isValid使用功能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)
您可以重载成员函数。即使它们是纯虚拟的并且应该被覆盖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-毕竟这就是探访的意义。
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |