我想知道使用依赖注入的 C++ 方式是什么?那是使用模板还是多态类?考虑以下代码,
class AbstractReader
{
public:
virtual void Read() = 0;
};
class XMLReader : public AbstractReader
{
public:
void Read() { std::cout << "Reading with a XML reader" << std::endl; }
};
class TextFileReader : public AbstractReader
{
public:
void Read() { std::cout << "Reading with a Text file reader" << std::endl; }
};
class Parser
{
public:
Parser(AbstractReader* p_reader) : reader(p_reader) { }
void StartParsing() { reader->Read();
// other parsing logic
}
private:
AbstractReader* reader;
};
template<class T>
class GenericParser
{
public:
GenericParser(T* p_reader) : reader(p_reader) { }
void StartParsing()
{
reader->Read();
}
private:
T* reader;
};
1 - 哪种方法最好?通用解析器还是解析器?我知道如果是GenericParser,可以删除继承。
2 - 如果模板是要走的路,可以将所有代码写在头文件中吗?我见过许多使用模板的类将所有代码写入头文件而不是 .h/.cpp 组合。这样做有什么问题吗,比如内联等?
有什么想法吗?