C++ 使用具有基类的friends作为Boost参数

C++ 使用具有基类的friends作为Boost参数,c++,boost,constructor,boost-parameter,C++,Boost,Constructor,Boost Parameter,我正在使用教程为扑克牌生成器创建一个命名参数构造函数。教程说要将ArgumentPack放入基类,但我想修改card generator类中的变量。我考虑过这样做: class CGconstructor_base { public: template<class ArgumentPack> CGconstructor_base(ArgumentPack const& args);/*tutorial says to put code in

我正在使用教程为扑克牌生成器创建一个命名参数构造函数。教程说要将ArgumentPack放入基类,但我想修改card generator类中的变量。我考虑过这样做:

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;
类CGU基{
公众:
模板
CGconstructor_base(ArgumentPack const&args);/*教程说要放置代码
在这个函数中*/
friend CardGenerator;//因此它可以修改CardGenerator的变量
}
类别CardGenerator:公共CGU库;
这是合法的还是有更好的方法操纵CardGenerator中的私有变量并使用Boost参数库?
操作系统:Windows XP Pro,编译器:Visual C++ 2008 Express,Boo: 1.37.0

< P>我想我们需要清理一下。 < L> > P>朋友声明似乎不恰当,从你想要的CG构造函数库可以访问Calter生成器属性:如果是这样,那么朋友声明进入CardGenerator(我说我认为是我的朋友,你不宣称自己是一个我认为是朋友的人)。< /P>
  • 你为什么需要朋友?如果像在教程中一样,使用一个结构,然后将属性填充到CGU库中,会更好。这样,您就可以从CardGenerator自然访问它们,而无需此补充线路。当你可以不用“friend”关键字时,你应该这样做(通常的警告:如果这样做不会增加太多成本)

  • 如果您想要私有继承,这是一个详细的实现。只有当其他类/方法需要知道如何使用“as-a”基时,才使用公共继承(甚至是受保护的)

  • 简言之:

    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 {};
    
    struct-cgu-base{
    模板
    CGconstructor_base(ArgumentPack const&args);/*教程说要放置代码
    在这个函数中*/
    cg_类型1 cg_属性1;
    cg_类型2 cg_属性2;
    }; // 别忘了这一点
    类CardGenerator:私有CGU基{};
    

    我真想知道为什么boost选择了“继承”而不是(我认为)更干净的组合。滥用继承(并要求多重继承)要容易得多。。。不过,我想这本书值得一读。

    谢谢!我真不敢相信我把朋友声明搞砸了。