相关疑难解决方法(0)

在C++中初始化静态std :: map <int,int>

初始化静态地图的正确方法是什么?我们需要一个初始化它的静态函数吗?

c++ stl stdmap

425
推荐指数
10
解决办法
41万
查看次数

干净的C++粒度朋友相当于?(答案:律师 - 客户成语)

为什么C++有public成员,任何人都可以调用和friend声明所有 private成员公开给定的外部类或方法,但没有提供语法将特定成员暴露给给定的调用者?

我想表达一些例程的接口,这些例程只能由已知的调用者调用,而不必让那些调用者完全访问所有的私有,这感觉是一个合理的想法.我能想出的最好的(下面)和其他人的建议到目前为止围绕着成语/不同间接性的模式,我真的只想要一种方法来获得单一的,简单的类定义,明确指出哪些来电者(比更细粒度),我的孩子,或绝对任何人)可以访问哪些成员.表达以下概念的最佳方式是什么?

// Can I grant Y::usesX(...) selective X::restricted(...) access more cleanly?
void Y::usesX(int n, X *x, int m) {
  X::AttorneyY::restricted(*x, n);
}

struct X {
  class AttorneyY;          // Proxies restricted state to part or all of Y.
private:
  void restricted(int);     // Something preferably selectively available.
  friend class AttorneyY;   // Give trusted member class private access.
  int personal_;            // Truly private state ... …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns private friend

47
推荐指数
2
解决办法
7527
查看次数

c ++派生类型的自动工厂注册

像我之前的许多人一样,我正在努力让我的派生类型自动注册到我的工厂.我读了很多问题,并试着把注意力集中在我没有找到的地方.

除了自动注册外,我的一切运行都很顺利.

我的目标:

  1. 自动注册我的基类Base的任何派生类
    1. 只有我标记为可注册的
    2. 不仅是Base的直接子类
      • 例如:基地 - >设备 - >摄像头 - > 网络摄像头
      • 这将使得使用像这个问题中描述的CRTP一样困难
  2. 我想要注册的类的最小变化 - 假人证明
  3. 宁愿使用registrator类而不是宏

是)我有的:

template <class T>
class abstract_factory
{
    public:
        template < typename Tsub > static void register_class();
        static T* create( const std::string& name );
    private:
        // allocator<T> is a helper class to create a pointer of correct type
        static std::map<std::string, boost::shared_ptr<allocator<T> > > s_map;
}; …
Run Code Online (Sandbox Code Playgroud)

c++ templates static-methods factory-pattern

16
推荐指数
2
解决办法
2万
查看次数