加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C依赖注入的方式 – 模板或虚拟方法?

发布时间:2020-12-16 10:15:36 所属栏目:百科 来源:网络整理
导读:我想知道使用依赖注入的C方式是什么?是使用模板还是多态类?考虑以下代码, class AbstractReader{public: virtual void Read() = 0;};class XMLReader : public AbstractReader{public: void Read() { std::cout "Reading with a XML reader" std::endl; }}
我想知道使用依赖注入的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或Parser?我知道如果它是GenericParser,可以删除继承.

2 – 如果要使用模板,是否可以在头文件中写入所有代码?我见过许多使用模板的类将所有代码写入头文件而不是.h / .cpp组合.这样做有什么问题,比如内联等吗?

有什么想法吗?

解决方法

根据您希望如何构建代码或头文件,您没有自由选择.答案由您的申请要求决定.

这取决于耦合是否可以在编译时决定,还是必须延迟到运行时间.

如果在编译时永久决定组件及其依赖项之间的耦合,则可以使用模板.然后编译器将能够执行内联.

但是,如果需要在运行时决定耦合(例如,用户选择哪个其他组件将提供依赖项,可能通过配置文件),那么您不能使用模板,并且必须使用运行时多态机制.如果是这样,您的选择包括虚函数,函数指针或std :: function.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读