我怎样才能用链继承C++解决这个问题?
How can I solve this problem with chain inheritance c++?
基本上我在大学里学习链继承,我希望用它来构建一个程序,我遇到的问题是在这部分:
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE> {
bool dadoValido(NUM_TYPE& d) const override {
// TODO: Implemente este metodo.
if (d > 0){
return true;
}else{
return false;
}
}
};
class FilterNaturalString: public Filtro<std::string> {
bool dadoValido(std::string& d) const override {
std::string::const_iterator it = d.begin();
while (it != d.end() && std::isdigit(*it)) ++it;
return !d.empty() && it == d.end();
}
};
void convert2int(std::vector<std::string>& in, std::vector<int>& out) {
Filtro<std::string>* new_check;
new_check = new FilterNaturalString;
for(std::string i : in){
if(new_check->dadoValido(i)){
out.push_back(stoi(i));
}
}
}
template <class NUM_TYPE> void test_filter_square_roots() {
std::vector<unsigned> entrada;
std::vector<unsigned> saida;
read_input(entrada);
Filtro<int>* new_check;
new_check = new FilterPositiveNumber;
}
我收到这个错误
error: invalid use of template-name ‘FilterPositiveNumber’ without an argument list
new_check = new FilterPositiveNumber;
我不明白为什么我第二次尝试实例化“Filtro”时出错,如果我在对 FilterNaturalString 执行它时以完全相同的方式调用它。
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE>
{
...
};
定义了一个 class 模板,一个潜在的 class 系列的蓝图。要使用它,您必须告诉编译器,或者编译器必须能够推断出模板要专门用于什么类型才能成为 class.
class FilterNaturalString: public Filtro<std::string>
{
...
};
定义一个class.
所以
new_check = new FilterNaturalString;
有效但是
new_check = new FilterPositiveNumber<int>;
需要 以允许编译器填充空白并创建可以从模板实例化的 class。
基本上我在大学里学习链继承,我希望用它来构建一个程序,我遇到的问题是在这部分:
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE> {
bool dadoValido(NUM_TYPE& d) const override {
// TODO: Implemente este metodo.
if (d > 0){
return true;
}else{
return false;
}
}
};
class FilterNaturalString: public Filtro<std::string> {
bool dadoValido(std::string& d) const override {
std::string::const_iterator it = d.begin();
while (it != d.end() && std::isdigit(*it)) ++it;
return !d.empty() && it == d.end();
}
};
void convert2int(std::vector<std::string>& in, std::vector<int>& out) {
Filtro<std::string>* new_check;
new_check = new FilterNaturalString;
for(std::string i : in){
if(new_check->dadoValido(i)){
out.push_back(stoi(i));
}
}
}
template <class NUM_TYPE> void test_filter_square_roots() {
std::vector<unsigned> entrada;
std::vector<unsigned> saida;
read_input(entrada);
Filtro<int>* new_check;
new_check = new FilterPositiveNumber;
}
我收到这个错误
error: invalid use of template-name ‘FilterPositiveNumber’ without an argument list
new_check = new FilterPositiveNumber;
我不明白为什么我第二次尝试实例化“Filtro”时出错,如果我在对 FilterNaturalString 执行它时以完全相同的方式调用它。
template <class NUM_TYPE>
class FilterPositiveNumber: public Filtro<NUM_TYPE>
{
...
};
定义了一个 class 模板,一个潜在的 class 系列的蓝图。要使用它,您必须告诉编译器,或者编译器必须能够推断出模板要专门用于什么类型才能成为 class.
class FilterNaturalString: public Filtro<std::string>
{
...
};
定义一个class.
所以
new_check = new FilterNaturalString;
有效但是
new_check = new FilterPositiveNumber<int>;
需要 以允许编译器填充空白并创建可以从模板实例化的 class。