gpt4 book ai didi

c++ - 喜欢虚拟还是模板?

转载 作者:行者123 更新时间:2023-12-01 14:18:14 26 4
gpt4 key购买 nike

假设您正在为多个类编写基础。什么时候应该让基类的所有依赖操作都是虚拟的,什么时候应该让类采用模板参数,这是一个具有必要特征的类?

例如

class base
{
public:
virtual void do_run() = 0;
void general_do_run()
{
// general stuff
// then
do_run();
}
};

class child: public base
{
public:
void do_run() override {}
};

对比

template<class traits>
class base
{
public:
void general_do_run()
{
traits::do_run();
}
};

struct child_traits
{
void do_run() { }
};

class child: public base<child_traits>
{
};

我注意到 STL 很少使用虚拟(我假设是因为开销)。

最佳答案

在虚拟案例中我可以写:

std::vector<std::unique_ptr<base>>

我可以用它来存储多个不同的派生类。

在模板的情况下,没有这种直接的方法可以将异构派生类存储在容器中并用它们做任何有用的事情。你必须使用这样的东西:

std::vector<std::variant<child, child2, child3>>

这是可能的,但可能会占用更多空间,大多数 C++ 用户不太熟悉,并且如果其他人想要在不修改 vector 类型的情况下添加自己的派生类型,则一点也不灵活。

使用 virtual 实现运行时多态性。使用模板或其他技术实现静态(编译时)多态性。

关于c++ - 喜欢虚拟还是模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62964824/

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