是否有可能使用相同的函数名和不同的参数进行多态性?
例如,我希望这三个函数成为一个。
virtual bool isValid1(const std::string&) = 0;
virtual bool isValid2(const uint32_t&) = 0;
virtual bool isValid3(const int& num) = 0;换句话说,我有一个基A和三个派生的A类。我还有一个基B,它包含一个Base类的向量和一个T(模板类型,可以是string、unit32或int)参数。当我想从Base 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;
};发布于 2019-03-25 14:15:35
您确实可以在BaseA类中使用相同的成员函数名。这是重载的一部分,它是完全有效的,因为在名称查找之后,ADL将帮助确定您要调用的函数。
准确地说,您创建的每个函数的损坏名称取决于函数名称和函数参数。
struct BaseA
{
virtual bool isValid(const std::string&) = 0;
virtual bool isValid(const uint32_t&) = 0;
virtual bool isValid(const int &num) = 0;
};BaseB::validate() const函数有点粗略。您可能希望传递一个std::size_t参数来访问向量中的正确元素。
virtual bool validate(std::size_t elem) const
{
return vec[elem]->isValid(var);
}下面是最后输出的代码示例:https://rextester.com/IHP38905
https://stackoverflow.com/questions/55338931
复制相似问题