Maneira de injeção de dependência em C ++ - modelos ou métodos virtuai

Gostaria de saber qual é a maneira C ++ de usar injeção de dependência? Isso está usando modelos ou classes polimórficas? Considere o seguinte código,

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 - Qual é o melhor método? GenericParser ou Parser? Eu sei se é GenericParser, a herança pode ser removid

2 - Se os modelos são o caminho a seguir, não há problema em escrever todo o código nos arquivos de cabeçalho? Eu já vi muitas classes usando modelos gravando todo o código nos arquivos de cabeçalho, em vez da combinação .h / .cpp. Existe algum problema ao fazê-lo, algo como inlining etc?

Alguma ideia

questionAnswers(8)

yourAnswerToTheQuestion