gpt4 book ai didi

c++ - 如何使用可选值初始化 shared_ptr 映射

转载 作者:行者123 更新时间:2023-11-30 02:03:34 25 4
gpt4 key购买 nike

我正在尝试使用具有可选值的映射来初始化 shared_ptr。我将在程序的后期初始化这些值。

我阅读了以下帖子并将其用作指南:How to add valid key without specifying value to a std::map?

但我的情况有点不同,因为我使用的是 shared_ptr。不用多说,这是我写的代码:

ShaderProgram.h

...
#include <map>
#include <boost/shared_ptr.hpp>
#include <boost/optional.hpp>

typedef map<string, optional<GLuint> > attributes_map;

class ShaderProgram
{
public:
ShaderProgram(vector<string> attributeList);
...
private:
shared_ptr<attributes_map> attributes;
};

ShaderProgram.mm

ShaderProgram::ShaderProgram(vector<string> attributeList)
{
// Prepare a map for the attributes
for (vector<string>::size_type i = 0; i < attributeList.size(); i++)
{
string attribute = attributeList[i];
attributes[attribute];
}
}

编译器通知我以下错误:类型“shared_ptr”不提供下标运算符。

有人知道可能是什么问题吗?

最佳答案

attributes 是一个 shared_ptr 并且没有 operator[]map 有。您需要取消引用它:

(*attributes)[attribute];

请注意,在构造函数中没有为 attributes 分配 map 对象,因此一旦编译器错误得到解决,您将得到一些描述的运行时失败。分配一个 map 实例:

ShaderProgram::ShaderProgram(vector<string> attributeList) :
attributes(std::make_shared<attributes_map>())
{
...
}

或者不使用shared_ptr,因为在这种情况下为什么需要动态分配并不明显:

private:
attributes_map attributes;

通过引用传递 attributeList 以避免不必要的复制,并且作为 const 因为构造函数不会修改它:

ShaderProgram::ShaderProgram(const vector<string>& attributeList)

关于c++ - 如何使用可选值初始化 shared_ptr 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719492/

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