gpt4 book ai didi

c++ - 来自对象 vector 的虚函数调用的模板版本

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:31 24 4
gpt4 key购买 nike

是否可以通过模板实现类似于下面伪代码的东西?如果是这样,在这里获得正确的编译时多态性的正确方法是什么?谢谢!

class Base {virtual void DoSomething();};
class Derived:public Base{void DoSomething();};
class Derived1:public Base{void DoSomething();};
class Derived2... etc.

std::vector<Base*> bases;
bases.push_back(new Derived());
bases.push_back(new Derived1());
etc...

bases[i]->DoSomething();

编辑

由于上面的内容引起了一些困惑,我想我应该添加一个我刚刚发现的建议的起始解决方案的示例,该解决方案是针对与我自己的问题类似的问题给出的。这是从 2001 年的旧澳大利亚 linux c++ 板上提取的 http://lists.linux.org.au/archives/tuxcpprogramming/2001-August/000135.html :

squareTy square;
twiceTy twice;
thriceTy thrice;

functionBaseTy* fns[] = { &square, &twice, &thrice };

template <class T, int N>
inline
void my_algorithm(T* functions[N])
{
// This deduces T and the array size N
my_real_algorithm(functions, N);
}

template <class T> // not inline
void my_real_algorithm(T* functions, int n)
{
// Loop here ...
}

最佳答案

如果您的容器( vector )跟踪基类实例指针的集合,您需要为每个实例支付标准 vtable 指针/间接(或可能不值得付出努力的自定义等价物)。

只有当您在编译时知 Prop 体(派生)类型时,静态消除 vtable/函数指针开销的可能性才会出现。

关于c++ - 来自对象 vector 的虚函数调用的模板版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900329/

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