gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:50:49 25 4
gpt4 key购买 nike

我听说模板可以用来通过静态多态来复制动态多态。如果是这种情况,我很困惑它是如何工作的。

我认为模板的目的是复制完全相同的行为,但跨不同的类。在契约(Contract)中,动态多态性允许您为不同的类调用完全相同的 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;
}

I thought the purpose of templates was to replicate the exact same behaviour, but across different classes. In contract dynamic polymorphism allows you to call the exact same API (which can have different behaviour in the functions) for different classes

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

大概就是这个意思

replicate dynamic polymorphism through static polymorphism

当然这不适用于依赖于运行时条件(用户输入等)的情况,多态分支必须在编译时已知

关于c++ - 当行为可以不同时,模板如何复制动态多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com