gpt4 book ai didi

c++ - c++中的模板类和friend关键字(具体例子引用boost::multi_index)

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

所以你有类(class)员工

class employee {
public:
employee(const string &name, int id) : m_name(name) , m_id(id) {}

const string &getName() const { return m_name; }
int getID() const { return m_id; }
private:
string &m_name;
int m_id;
};

并且您有用于封装的私有(private)数据成员。但是现在你想使用 boost::multi_index....

typedef multi_index_container <
employee,
indexed_by<
ordered_non_unique<
composite_key<
Name,
member< employee, string & , &employee::m_name>,
member< employee, int, &employee::m_id>
>
>
>
> employee_set;

所以我可以使用 BOOST_INDEX_CONST_MEM_FUN...

typedef multi_index_container <
employee,
indexed_by<
ordered_non_unique<
composite_key<
Name,
BOOST_MULTI_INDEX_CONST_MEM_FUN(employee, const string&, getName),
BOOST_MULTI_INDEX_CONST_MEM_FUN(employee, int, getID)
>
>
>
> employee_set;

但我真正想做的是授予 employee_set 对我的员工类的私有(private)数据成员的访问权限。我只是不知道该怎么做 :-/

最佳答案

如果我没理解错的话,它实际上是访问指向成员值的指针 &employee::m_name,用作 employee_set typedef 中 member<> 的第三个模板参数,这会导致访问冲突(即编译器错误)。如果可以获取该指针值,那么它将在 Boost.MultiIndex 代码中传递并可以从任何地方调用,并且不需要进行访问检查。现在,我不知道 employee 类(class)如何与顶级 typedef 建立友元(我认为你只能将友元授予类(class)和函数),但你可以让 employee_set 成为新类(class)的公共(public)成员,并授予友元到那个类(class):

class employee { 
...
friend struct mytypedefs;
};

struct mytypedefs {
typedef multi_index_container <
... &employee::m_name ...
> employee_set;
};

int main() {
mytypedefs::employee_set my_employee_set;
}

关于c++ - c++中的模板类和friend关键字(具体例子引用boost::multi_index),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485667/

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