小编eom*_*mer的帖子

在C++中跟踪成员变量的下划线

我见过人们在类中使用尾随下划线作为成员变量,例如在着名的C++ FAQ Lite中.

我认为它的目的不是将变量标记为成员,而是"m_"的用途.它的实际目的是使一个名为field的访问器方法成为可能,如下所示:

class Foo {
public:
    bar the_bar() { return the_bar_; }
private:
    bar the_bar_;
}
Run Code Online (Sandbox Code Playgroud)

访问器省略了"get_"部分在STL和boost中是常见的,我正在尝试尽可能接近这些开发编码风格,但我不能真正看到它们使用下划线技巧.我无法在STL或boost中找到一个只返回私有变量的访问器.

我有几个问题我希望你能回答:

  1. 这个惯例来自哪里?短暂聊天?Objective-C的?微软?我在想.
  2. 我是否会为所有私有成员使用尾随下划线,或者只是作为一种解决方法,以防我想将函数命名为变量?
  3. 你能指点我的STL或代码来演示成员变量的尾随下划线吗?
  4. 有谁知道Stroustrup对这个问题的看法是什么?
  5. 你能指点我进一步讨论这个问题吗?

c++ naming-conventions member

42
推荐指数
5
解决办法
5万
查看次数

包装适用于Linux的专有软件

我正在进行跨平台开发,我想为Linux构建一个漂亮的,自包含的(!)包.我知道这不是通常的方式,但应用程序需要一个地方的所有数据,所以我将它安装到/ opt,就像许多其他专有软件包一样.我最终将提供deb和rpm包,但现在只有.tar.gz.用户应该在某处提取它,它应该工作.我宁愿没有安装程序.

首先是我的问题,然后是细节:

  1. 其他人如何为Linux打包专有软件?
  2. 是否有包装软件的工具,包括共享库?

现在来看一些细节:这是我的项目(为此我称之为foo)布局:

  • foo(二进制)
  • config.ini文件
  • 数据

现在在包中,将有两个额外的元素:

  • foo.sh

libs将包含项目所需的所有共享库,foo.sh是一个将LD_LIBRARY_PATH设置为包含libs的脚本.因此,用户将执行foo.sh并且程序应该启动.

我有一个shell脚本,它按以下步骤打包软件:

  1. 创建空目录并将foo.sh复制到它
  2. 调用构建过程并将install安装到新目录中
  3. 从文件系统复制共享库
  4. 将所有内容打包为.tar.gz

你觉得这怎么样?这种方法存在一些问题:

  • 我必须对所有依赖项进行两次硬编码(一次在CMake中,一次在打包脚本中)
  • 我必须两次定义版本号(一次在源代码中,一次在打包脚本中)

你怎么做呢?

编辑: 刚出现的另一个问题:您如何确定您的软件所依赖的库?我做了一个ldd foo,但是有很多.我看了一下WorldOfGoo包的外观,它们只发送了很少的库.如何假设用户系统中存在哪个库,哪个库不存在?只需将所有目标分布安装到虚拟matine中,看看需要什么?

linux packaging distribution

7
推荐指数
1
解决办法
4166
查看次数