考虑下面的两个类。为了减少代码中的冗余,我想将两者结合起来。
class input_file: public ifstream {
string str;
public:
input_file();
~input_file();
input_file(string);
void _name(string);
void _open(string);
}; // input_file
class output_file: public ofstream {
string str;
public:
output_file();
~output_file();
output_file(string);
void _name(string);
void _open(string);
}; // output_file
void output_file::_open(string str) {
open(str);
if (!this->is_open() || !this->good()) {
error("Can't open output file: " + str + "!"); // This will exit
}
if(DEBUG){debug("output_file::_open \"(" + str + ")\"");}
}
我在C ++中有一些关于templates
的东西,我相信下面的函数会起作用。我可能必须在输出函数中使用to_string
。
template<typename T>
class io_file { // Different inheritance
string str;
public
...
};
void output_file::_open(string str) {
open(str);
if (!this->is_open() || !this->good()) {
error("Can't open " + T + " file: " + str + "!"); // This will exit
}
if(DEBUG){debug(T + "_file::_open \"(" + str + ")\"");}
}
问题是关于类的继承,我将如何编写具有不同继承的类定义?
答案 0 :(得分:2)
试试这个:
template<typename T>
class io_file : public T // where T can be either ifstream or ofstream
{ // Different inheritance
string str;
public
...
};