gpt4 book ai didi

c++ - 在派生类上使用工厂方法模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:30 26 4
gpt4 key购买 nike

我有一个基类,其中会有很多派生类。然而,它是指向存储在我程序容器中的基类的指针,因此它可以迭代并调用它们的虚函数。

我有另一个类将基类指针添加到此容器中,因此当派生类是ed(不是nude)时,它们必须返回或存储为基类类指针。

我正在考虑制作一个简单的基类 Factory 方法,它使用模板为我做这件事:

    template<class T> //T is the derived class
static T* Factory(){
return static_cast<T*>(functionThatAddsBaseClassPointerToContainer(new T));
}

我看到两个主要的优点/缺点:

优点:不需要为每个派生类覆盖它

缺点:如果将不是从我的基派生的类类型作为 T 传递,可能会被错误使用。

有没有办法确保 T 是在此函数 Factory 中派生的?或者我是否可以期望编译器捕获未派生 T 的实例?

这种通用方法是可以接受的想法,还是有更好的替代方法?

最佳答案

Is there a way to ensure that T is derived inside this function Factory?

如果 functionThatAddsBaseClassPointerToContainer 采用 Base* 它已经完成了。

Base* functionThatAddsBaseClassPointerToContainer(Base* b);  // <-- 

template<class T> //T is the derived class
static T* Factory(){
// if T was not derived from Base, the following line fails to compile:
return static_cast<T*>(functionThatAddsBaseClassPointerToContainer(new T));
}

关于c++ - 在派生类上使用工厂方法模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663526/

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