首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不同参数的多态性

不同参数的多态性
EN

Stack Overflow用户
提问于 2019-03-25 13:28:42
回答 1查看 1.4K关注 0票数 6

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

例如,我希望这三个函数成为一个。

代码语言:javascript
运行
复制
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(模板类型,可以是stringunit32int)参数。当我想从Base B调用isValid函数时,使用vector和参数(如:isValid(argument)),我有点卡住了,因为我之前必须知道是调用isValid1(string)isValid2(uint32)还是isValid3(int)

给那些问过的人的代码,

代码语言:javascript
运行
复制
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;
};
  • 我选择多态性,但其他类型的解决方案是受欢迎的。
  • 如果问题太短,无法理解,请告诉我,这样我就可以用另一种方法重写。
EN

回答 1

Stack Overflow用户

发布于 2019-03-25 14:15:35

您确实可以在BaseA类中使用相同的成员函数名。这是重载的一部分,它是完全有效的,因为在名称查找之后,ADL将帮助确定您要调用的函数。

准确地说,您创建的每个函数的损坏名称取决于函数名称和函数参数。

代码语言:javascript
运行
复制
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参数来访问向量中的正确元素。

代码语言:javascript
运行
复制
virtual bool validate(std::size_t elem) const
{
    return vec[elem]->isValid(var);
}

下面是最后输出的代码示例:https://rextester.com/IHP38905

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55338931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档