是否有可能使用具有不同参数的相同名称的函数来实现多态性?
例如,我希望这三个功能合二为一。
virtual bool isValid1(const std::string&) = 0;
virtual bool isValid2(const uint32_t&) = 0;
virtual bool isValid3(const int& num) = 0;
换句话说,我有一个基地A
和三个派生A类。我也有基地B
包含基 A 类和 T(模板类型,可以是string
, unit32
or int
) 争论。当我想从基地打电话时B
the isValid
函数使用vector
和论证(像这样:isValid(argument)
)我有点卡住了,因为我必须先知道是否要打电话isValid1(string)
, isValid2(uint32)
or 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;
};
- 我选择多态性,但也欢迎其他类型的解决方案。
- 如果问题太短而无法理解,请告诉我,以便我可以用不同的方法重写。
You can overload member functions. Even if they are pure virtual and meant to be overriden1:
virtual bool isValid(const std::string&) = 0;
virtual bool isValid(const uint32_t&) = 0;
virtual bool isValid(const int& num) = 0;
Now isValid(argument)
将进行重载解析并选择要调用的重载(通过动态调度)。唯一的潜在问题是,最后两个重载对于某些参数可能同样有效,因此重载可能不明确。但这确实取决于T
在它被召唤时。
1 - That's exactly what visitation is about, after all.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)