C ++模板和继承

时间:2015-10-05 19:50:27

标签: c++ class inheritance

考虑下面的两个类。为了减少代码中的冗余,我想将两者结合起来。

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 + ")\"");}
}

问题是关于类的继承,我将如何编写具有不同继承的类定义?

1 个答案:

答案 0 :(得分:2)

试试这个:

template<typename T>
class io_file : public T // where T can be either ifstream or ofstream 
{ // Different inheritance
    string str;
  public
    ...
};