依存性注入を使用する 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またはパーサー? GenericParserであれば、継承を削除できることがわかっています。
2 - テンプレートを使用する場合、すべてのコードをヘッダー ファイルに記述しても問題ありませんか? テンプレートを使用する多くのクラスが、.h/.cpp の組み合わせではなく、すべてのコードをヘッダー ファイルに書き込むのを見てきました。インライン化など、そうすることに何か問題はありますか?
何かご意見は?