- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这个问题困扰了我一段时间,但找不到最好的解决方法。我试图通过一个例子来说明这一点。
我正在开发一个包含许多类的图形库。一些类彼此之间是“一部分”关系,例如这 3 个类:
namespace MyGraphicsLibrary
{
class MatrixStack
{
};
class Transform
{
MatrixStack mMatrixStack;
};
class Renderer
{
Transform mTransform;
};
}
Renderer
类供用户使用,但我不希望他们在查找 Transform
、MatrixStack
类时看到 我的图形库
。最后两个类仅供Renderer
类使用,不供用户使用。
这里我想做两件事:
对用户隐藏 Transform
、MatrixStack
类。
反射(reflect)类的“部分”层次结构。
我尝试了以下方法来解决这个问题:
对我来说最好的解决方案是私有(private)嵌套类,因为它会向用户表明嵌套类是私有(private)的,并且如果您只查看 Renderer
也会反射(reflect)层次结构类声明。以下帖子实际上让我不确定这是一个好的解决方案:Pros and cons of using nested C++ classes and enumerations?
我试图将Transform
、MatrixStack
放入另一个名为Private
的命名空间中。因此,查找 MyGraphicsLibrary
命名空间的用户会看到 Private
命名空间,它仅涵盖所有不供用户使用的类。这很好,但是有很多其他类也有同样的问题,我很快用彼此无关的类填充了 Private
命名空间。在这里我只能想出丑陋的解决方案,比如引入嵌套命名空间:
namespace MyGraphicsLibrary
{
//private classes belonging to Renderer class
namespace PrivateRenderer
{
class MatrixStack
{
};
class Transform
{
MatrixStack mMatrixStack;
};
}
//public classes for users
class Renderer
{
Transform mTransform;
};
}
也许我在这里漏掉了一些东西,但你认为哪一个是正确的选择。有人有第三种方法吗?
最佳答案
您可以使用 PIMPL-(也称为不透明指针)习惯用法。使用帽子,您可以通过以下方式完全隐藏用户的类:
在您的公共(public) header 中(在您的包含文件夹中):渲染器.h
class RendererImpl; // forward declaration of internal render structure
//public classes for users
class Renderer
{
public:
Renderer();
~Renderer();
// public interface comes here and delegates all calls to RendererImpl (have to be implemented in cpp)
RendererImpl* renderer; // better use something like QScopedPointer here
};
中央人民政府:
#include "RendererImpl.h" // your actual renderer that
Renderer::Renderer()
:renderer(new RendererImpl)
{}
Renderer::~Renderer()
{
delete renderer;
}
这些实现可能对 API 完全隐藏。 header 必须与实际接口(interface)分开。
关于c++ 命名空间和类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384757/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!