- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否有可能使用具有不同参数的相同名称的函数进行多态性?
例如,我希望这三个功能成为一个。
virtual bool isValid1(const std::string&) = 0;
virtual bool isValid2(const uint32_t&) = 0;
virtual bool isValid3(const int& num) = 0;
换句话说,我有一个Base A
和三个Derived A 类。我还有 Base B
,它包含一个 Base A 类的 vector 和一个 T(模板类型,可以是 string
、unit32
或 int
) 参数。当我想使用 vector
和参数从 Base B
调用 isValid
函数时(如下所示: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;
};
最佳答案
您可以 overload成员函数。即使它们是纯虚拟的并且打算被覆盖1:
virtual bool isValid(const std::string&) = 0;
virtual bool isValid(const uint32_t&) = 0;
virtual bool isValid(const int& num) = 0;
现在 isValid(argument)
将进行重载解析并选择要调用的重载(通过动态调度)。唯一潜在的问题是最后两个重载对于某些参数可能同样好,因此重载可能是模棱两可的。但这实际上取决于它被调用时的 T
。
<子>1 - 这正是visitation是关于,毕竟。
关于c++ - 具有不同参数的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338931/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!