gpt4 book ai didi

c++ - 运行时非多态容器

转载 作者:行者123 更新时间:2023-11-30 01:42:39 25 4
gpt4 key购买 nike

我正在尝试将对象存储在几种容器类型之一中,容器的类型在运行时是已知的。容器的接口(interface)是相同的,但容器不是多态的。

我想做的是避免运行时 vtable 强制的额外跳转 - 通过拥有一个应该是具体容器类型的变量。

假设我有容器:

class Vector1<T>
{
T get();
}
class Vector2<T>
{
T get();
}

我想要一个容器,它可以是 Vector1 或 Vector2,具体取决于一些运行时参数。

所以我的课应该是:

Class VectorWrapper
{
Vector1<SomeType> v1;
Vector2<Sometype> v2;

inline Sometype get()
{
**how do I choose between v1 and v2, without the extra jump?**
}
}

最佳答案

为了避免在运行时做出决定,您必须在编译时做出决定。这意味着使用模板。而且,如果您的时间非常有限,以至于在关键路径上确实不能有非必要的跳跃,那么您必须在您的程序中不断地插入 tempaltedness 越来越高,直到达到额外的跳跃可以 制作。是的,这在理论上可能意味着模板中有 >= 90% 的代码,但如果您真的需要避免跳转,那就是代价。

换句话说,如果 VectorWrapper 不能用 if 来决定,它也必须是一个模板。使用它的代码也必须如此,等等,直到您最终达到 if 不是那么昂贵的程度。

如果您发现这个模板化部分太大,但至少可以以某种方式隔离,您甚至可以做一些事情,比如构建几个共享库(每个共享库都有不同的模板参数),并在运行时加载一个包含模板参数的正确组合。

关于c++ - 运行时非多态容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39325017/

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