gpt4 book ai didi

c++ - 将 friend 与基类一起用于 Boost 参数

转载 作者:行者123 更新时间:2023-11-28 08:32:21 25 4
gpt4 key购买 nike

我正在使用 Boost Parameter为扑克牌生成器创建命名参数构造函数的教程。教程说把ArgumentPack放到一个基类中,但是我想修改卡片生成器类中的变量。我考虑过这样做:

class CGconstructor_base {
public:
template<class ArgumentPack>
CGconstructor_base(ArgumentPack const& args);/*tutorial says to put code
in this function */
friend CardGenerator;//so it can modify the variables of CardGenerator
}
class CardGenerator:public CGconstructor_base;

这是合法的还是有更好的方法来操作 CardGenerator 中的私有(private)变量并使用 Boost Parameter 库?操作系统:Windows XP Pro,编译器:Visual C++ 2008 Express,Boost:1.39.0

最佳答案

我想我们需要清理一下。

  1. 从您希望 CGconstructor_base 能够访问 CardGenerator 属性的评论来看, friend 声明似乎位置不当:如果是这样,那么 friend 声明进入 CardGenerator(我说我认为谁是我的 friend ,你没有宣称自己是我认为是 friend 的人)。

  2. 你为什么需要 friend ?如果像教程中那样使用一个结构,然后将属性填充到 CGconstructor_base 中,那就更好了。这样您就可以自然地从 CardGenerator 访问它们而无需此补充行。当您可以不用“ friend ”关键字时,您应该这样做(通常的警告:如果这样做不会增加太多成本)。

  3. 你想在这里继承PRIVATE,这是一个详细的实现。仅当其他类/方法需要知道将您用作“基础”时才使用公共(public)继承(或什至 protected )。

简而言之:

struct CGconstructor_base {
template<class ArgumentPack>
CGconstructor_base(ArgumentPack const& args);/*tutorial says to put code
in this function */

cg_type1 cg_attr1;
cg_type2 cg_attr2;
}; // don't forget this

class CardGenerator:private CGconstructor_base {};

我确实想知道为什么 boost 选择了“继承”而不是(我认为)更清洁的组合。滥用继承(并且需要多重继承)要容易得多……我认为它值得单独作为一个主题。

关于c++ - 将 friend 与基类一起用于 Boost 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387206/

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