C++ 当行为可能不同时,模板如何复制动态多态性?
我听说模板可以通过静态多态性来复制动态多态性。如果是这样的话,我对它的工作原理感到困惑 我认为模板的目的是在不同的类中复制完全相同的行为。契约中的动态多态性允许您为不同的类调用完全相同的API(函数中可能有不同的行为)?如果对象之间存在不同的行为,模板如何实现这一点???以下是一个示例:C++ 当行为可能不同时,模板如何复制动态多态性?,c++,oop,templates,polymorphism,C++,Oop,Templates,Polymorphism,我听说模板可以通过静态多态性来复制动态多态性。如果是这样的话,我对它的工作原理感到困惑 我认为模板的目的是在不同的类中复制完全相同的行为。契约中的动态多态性允许您为不同的类调用完全相同的API(函数中可能有不同的行为)?如果对象之间存在不同的行为,模板如何实现这一点???以下是一个示例: template <typename T> class logger { public: void log(const std::string& str) { this
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++习惯用法的特殊用法,在某些情况下,它可以代替静态多态性的动态多态性。
请参见您要求我们对您听到的内容进行评论?你为什么不问问告诉你这是什么意思的人?你有什么推荐信吗?据我所知,模板是严格的编译时工具。“多态性”可以通过使用不带模板的调度表来实现,尽管使用模板可以在某种程度上“自动化”该过程。。。