gpt4 book ai didi

c++ - 如何使用 std::reference_wrapper 作为类成员?

转载 作者:行者123 更新时间:2023-12-05 06:06:08 24 4
gpt4 key购买 nike

我使用的库只返回对已创建对象的引用 Entity& Create(int id) .在我的类里面,我需要创建其中一个并存储它。

我曾想过使用类成员std::reference_wrapper<Entity> MyClass::m_Entity但问题是,我想在调用类似 MyClass::InitEntity() 的方法时创建此对象– 所以我遇到编译错误“没有可用的默认构造函数”,因为 m_Entity未在我的构造函数中初始化。

除了更改我的类设计之外,还有什么办法可以解决这个问题吗?还是在这种情况下使用指针会更有意义?

最佳答案

MyClass如果它没有对 Entity 的有效引用,则处于有效状态?如果是,那么您应该使用指针。构造函数将指针初始化为 nullptr , 和 InitEntity函数将其分配给有效的地址 Entity对象。

class MyClass
{
public:
MyClass(): _entity(nullptr) {}
void InitEntity() { _entity = &Create(123); }
void doSomethingWithEntity()
{
if (_entity) ...
}

private:
Entity *_entity;
};

如果MyClass如果没有对 Entity 的有效引用,处于有效状态, 那么你可以使用 std::reference_wrapper<Entity>并在构造函数中对其进行初始化。

class MyClass
{
public:
MyClass(): _entity(Create(123)) {}
void doSomethingWithEntity()
{
...
}

private:
std::reference_wrapper<Entity> _entity;
};

当然,你选择哪一个取决于如何MyClass应该被使用。个人认为std::reference_wrapper的界面对我来说有点尴尬,所以我也会在第二种情况下使用指针(同时仍确保它始终不为空)。

关于c++ - 如何使用 std::reference_wrapper 作为类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65849456/

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