C++ 当行为可能不同时,模板如何复制动态多态性?

C++ 当行为可能不同时,模板如何复制动态多态性?,c++,oop,templates,polymorphism,C++,Oop,Templates,Polymorphism,我听说模板可以通过静态多态性来复制动态多态性。如果是这样的话,我对它的工作原理感到困惑 我认为模板的目的是在不同的类中复制完全相同的行为。契约中的动态多态性允许您为不同的类调用完全相同的API(函数中可能有不同的行为)?如果对象之间存在不同的行为,模板如何实现这一点???以下是一个示例: template <typename T> class logger { public: void log(const std::string& str) { this

我听说模板可以通过静态多态性来复制动态多态性。如果是这样的话,我对它的工作原理感到困惑

我认为模板的目的是在不同的类中复制完全相同的行为。契约中的动态多态性允许您为不同的类调用完全相同的API(函数中可能有不同的行为)?如果对象之间存在不同的行为,模板如何实现这一点???

以下是一个示例:

template <typename T>
class logger
{
  public:

  void log(const std::string& str)
  {
    this->_interface.kindof_virtual_method_without_runtime_cost(str);
  }

  private:

  T _interface;
};

class on_console{...};
class on_network{...};

int main(void)
{
  logger<on_console> logger_console;
  logger<on_network> logger_network;

  logger_console.log("debug");
  logger_network.log("release");

  return 0;
}
模板
类记录器
{
公众:
无效日志(常量std::string和str)
{
这个->\u接口。类似于没有运行时成本(str)的虚拟方法;
}
私人:
T_接口;
};
在控制台{…}上初始化;
网络{…}上的类;
内部主(空)
{
记录器/记录器控制台;
测井仪测井仪网络;
logger_console.log(“调试”);
logger_network.log(“发布”);
返回0;
}

我认为模板的目的是在不同的类中复制完全相同的行为。契约中的动态多态性允许您为不同的类调用完全相同的API(函数中可能有不同的行为)

正如您在上面的示例中所看到的,它是一个模板,允许您调用完全相同的API(“kindof_virtual_method_,而不需要_runtime_cost”成员函数),对于不同的类,它可以有不同的行为

这可能就是我们的意思

通过静态多态性复制动态多态性


当然,这并不适用于运行时条件(用户输入等)。多态性分支必须在编译时知道

。您所要查找的是CTRP C++习惯用法的特殊用法,在某些情况下,它可以代替静态多态性的动态多态性。
请参见

您要求我们对您听到的内容进行评论?你为什么不问问告诉你这是什么意思的人?你有什么推荐信吗?据我所知,模板是严格的编译时工具。“多态性”可以通过使用不带模板的调度表来实现,尽管使用模板可以在某种程度上“自动化”该过程。。。