C ++ способ внедрения зависимости - шаблоны или виртуальные методы?

Интересно, как 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. Есть ли какие-либо проблемы при этом, что-то вроде встраивания и т. Д.?

есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос