gpt4 book ai didi

c++ - 使用模板函数设计分层类

转载 作者:行者123 更新时间:2023-11-28 08:16:19 24 4
gpt4 key购买 nike

我正在编写一个类 Base,它有一个采用模板参数的成员函数:

class Base {
template<class T>
void func(const T& t) { ... }
};

有一个类 Derived,它在概念上继承了 Base 的性质,并且具有相同的函数 func,但实现不同。

起初我想从 Base 派生 Derived 并使 func 成为虚拟的,但我不能,因为它是模板。

我也想到了 CRTP,但它是一个选项,因为实例必须能够放入容器中并且在不知道它们的确切类型的情况下可以访问:

std::vector<Base*> v = ...;
v[0]->func(...);
v[1]->func(...);

重载 T 的可能类型也不是一种选择。

这种情况的最佳解决方案是什么?

除了主题之外,您是否会为此类问题推荐引用资料(最好是书籍)?

最佳答案

你不能像那样混合编译时多态性(模板)和运行时多态性。问题在于,使用模板时,编译器将在使用时按需生成代码,在您的特定情况下,您希望根据的运行时类型来决定实例化哪个成员函数 vector 中的对象。

如果可以与这些方法一起使用的类型数量有限,您可以提供不同的虚拟重载,如果您不想手动执行此操作,您可以定义一个包含所有类型 T 的类型列表,然后使用该类型列表来生成方法...但这将很难编码和维护。

我建议您陈述问题的实际要求(而不是您提出的解决方案的要求),这样人们就能够提供替代方法。

关于c++ - 使用模板函数设计分层类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648430/

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