我有一个 Validator 类及其派生类;
当我尝试返回指向派生类的指针时,方法返回基类(验证器)而不是派生类。
class Validator
{
public:
std::string m_name = "BaseValidator";
static const std::map<std::string, Validator *> validators();
static Validator *getByName(std::string &name);
};
const std::map<std::string, Validator*> Validator::validators()
{
std::map<std::string, Validator*> result;
//RequiredValidator is derived
result["required"] = new RequiredValidator();
return result;
}
Validator* Validator::getByName(std::string &name)
{
auto g_validators = Validator::validators();
auto validator = g_validators.find(name);
if(validator != g_validators.end()){
std::cout << "getByName: " << validator->second->m_name << std::endl;
return validator->second;
}else{
std::cerr << "Unknow type of validator: " << name << std::endl;
}
return nullptr;
}
//output BaseValidator but i need RequiredValidator
class RequiredValidator : public Validator
{
public:
std::string m_name = "RequiredValidator";
};
它返回一个派生实例,但因为validator
is a Validator*
,你正在看的是m_name
成员Validator
,不是其中之一RequiredValidator
.
(尽管名称相同,但它们是不同的变量。不存在“虚拟变量”。)
有几个选择;
Example:
class Validator
{
public:
Validator(const std::string& name = "BaseValidator") : m_name(name) {};
// ...
};
class RequiredValidator : public Validator
{
public:
RequiredValidator() : Validator("RequiredValidator") {}
// ...
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)