【发布时间】:2019-03-25 13:28:42
【问题描述】:
有没有可能用不同参数的同名函数进行多态性?
例如,我希望这三个功能合而为一。
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 类的向量和一个 T(模板类型,可以是 string、unit32 或 int)参数。当我想使用 vector 和参数从 Base B 调用 isValid 函数时(像这样:isValid(argument))我有点卡住了,因为我必须先知道是否调用 isValid1(string),@ 987654332@或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;
};
- 我选择了多态性,但也欢迎使用其他类型的解决方案。
- 如果问题太短而无法理解,请告诉我,以便我用不同的方法重写。
【问题讨论】:
-
你能告诉我们继承结构而不是描述它吗?
-
很高兴看到更多代码或伪代码来进一步解释您的问题。
-
您的
Field::bool validate()错误。您要为向量中的哪个元素返回isValid()??? -
怀疑这就是你想要的。现在每次你调用
validate(),你只是为第一个对象调用isValid()。只需将std::size_t elem传递给函数即可。
标签: c++