gpt4 book ai didi

C++ 可以使用引用来转换对象吗

转载 作者:行者123 更新时间:2023-11-28 05:37:22 25 4
gpt4 key购买 nike

我有一个可能有点愚蠢的快速问题,但希望有人能够为我解决问题。

基本上,我有一个类“Test”,它存储了一个类型为“A”的参数对象,其中还有几个其他类,如“B”、“C”、“D”,它们都扩展了“A”。

我想知道我是否可以使用此参数 (ObjectType) 创建该类型的新对象,即在转换时使用它。

我可以执行以下操作来创建父类型的新对象

AA* NewObject = SpawnObject<AA>();

但我想知道我是否可以做任何允许我使用我存储的参数的事情,即如果参数是一个对象类型“B”,它会知道做什么:

AA* NewObject = SpawnObject<AB>();

即本质上我是在问是否有任何方法可以实现以下目标,其中 ObjectType 是存储的参数

AA* NewObject = SpawnObject<ObjectType>();

如有任何帮助,我们将不胜感激。

最佳答案

是的,试试这个:

struct A
{
~virtual A() = default;
// ...
};

struct Test
{
explicit Test(std::unique_ptr<A> a) : a_(std::move(a)) {}

std::unique_ptr<A> a_;
};

template <typename T>
Test * SpawnObject()
{
return new Test(std::make_unique<T>());
}

用法:

struct B : A {};

Test * p = SpawnObject<B>();

当然你根本不应该使用 naked new:

template <typename T>
std::unique_ptr<Test> SpawnObject()
{
return std::make_unique<Test>(std::make_unique<T>());
}

您还可以扩展 maker 函数以将任意参数转发给派生类构造函数,以防它们都没有相同的构造函数签名。或者您可能根本不理会 maker 函数,只是直接实例化 Test 对象,使用适当类型的 make_unique 作为构造函数参数。

关于C++ 可以使用引用来转换对象吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941406/

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