小编Spa*_*ose的帖子

boost :: locale和std :: locale之间有什么权衡?

我正在使用C++对大型遗留代码库进行国际化,我面临一个困难的决定:我应该使用boost :: locale或std c ++ locales吗?

我承诺使用utf-8.我们必须进行相当广泛的文本处理,尽管它不是我们的代码所做的核心,但它很重要.我们可以期望完成大部分可能需要做的事情:时间,日期,数字和金钱格式化,整理,正则表达式,子串隔离,与boost :: filesystem的交互,数据库访问等.

boost :: locale介绍我明白了

  1. 设置全局区域设置有副作用(csv示例).它会影响printf和boolst lexical_cast.一些第三方图书馆可能会破产.
  2. 在某些区域设置上打破了数字格式.
  3. 区域设置名称未标准化.
  4. 许多供应商仅提供C和POSIX,因此GCC仅支持在Linux下进行本地化.

我无法评估第1点的影响我认为第2点非常严重,如果它影响我们,广告3和4对我们来说不是什么大问题.

在社区中是否有共识认为Boost :: locale是更好的选择?标准社区中是否有任何动议来解决std :: locale的问题?任何人都可以帮我做出更明智的决定吗?

也许最重要的是,从一个迁移到另一个是否很简单?这两个人互相打得怎么样?使用boost语言环境设置全局语言环境,然后使用std工具是否合法?

c++ regex boost internationalization c++11

11
推荐指数
1
解决办法
2298
查看次数

如何唯一标识git存储库

我想创建一个工具,在克隆所述存储库之前检查我是否已经拥有远程存储库的本地克隆.要做到这一点,我需要一种方法来测试B是否与存储库A相同 - 我猜我的意思是他们有可合并的历史记录.B的名称可能与A不同,可能还有其他分支 - 通常的用例.

有没有办法做到这一点?我有一个初步的想法如何做到这一点,但我想也许这里有人有一个明确的答案.

设想

获取分支列表并搜索公共分支(通过哈希).然后对于公共分支,检查初始提交是否相同(通过哈希).那时我会说'够好'.我想我没事,除非有人一直在搞乱历史,这是我愿意忽视的用例.要做到这一点,我需要一种方法来获取分支并从远程存储库提交信息,而无需进行克隆.我可以使用ssh和bash来解决这个问题,但是仅使用git的解决方案会更好.

对这个半生不熟的想法的反馈也很受欢迎.

为什么这不是Git存储库唯一ID的重复

引用的问题是寻找唯一的存储库ID,或者创建一个存储库ID.没有这样的野兽存在,即使它确实存在,它是否与此相关仍然值得怀疑,因为我想确定两个存储库是否具有可合并的历史(即我可以在两者之间获取和合并) - 一个稍微更好定义的问题.我愿意忽略用户修改历史记录的可能性,但也很想听听如何处理这种情况.

git uuid uniqueidentifier

10
推荐指数
1
解决办法
3326
查看次数

将库链接到 cmake 项目中的所有目标

考虑一个由一个库和一组使用该库的可执行文件组成的项目。一种简单的方法是add_library(),后接一系列对add_executable() target_link_libraries()

这是大量的样板代码。如果能够执行类似的操作set(PROJECT_LINK_LIBS, lib1 ...)并让 CMake 删除额外的样板文件,那就太好了。

进一步思考这一点,我意识到我想要一个link_libraries行为类似于 的函数include_directories。我认为:

  1. 在很多情况下会有用。
  2. 将导致干燥机 CMakeLists。
  3. 会鼓励更好的代码组织——会有一种自然的动力来组织文件夹、代码和可执行文件,使所有可执行文件都具有相同的依赖关系——当然是一种干净的做法。

有这样的事吗?

cmake

8
推荐指数
2
解决办法
5199
查看次数

std::string 运算符 + 与 stringstream 的性能

我正在将旧代码库从使用字符串的自定义实现迁移到使用 std::string。我们的一位工程师担心这可能会导致我们使用 += 和 + 连接相对较长的字符串时出现性能问题。他特别关心的是随着字符串的动态增长如何分配内存,他建议 stringstream 在这方面表现得更好。对于那些试图回应“基准然后优化”或对这些效果的看法的人 - 我当然同意,这就是计划。我只是想知道这个理论。

我对这个问题做了一些搜索,并遇到了这个问题: Efficient string concatenation in C++,这有点过时了。

现在我想知道:字符串 += 的内存分配算法真的与字符串流的不同吗?上面问题中提出的复制问题怎么样——这些问题在 C++ 11/14 中发生了变化吗?

c++ string

6
推荐指数
1
解决办法
6484
查看次数

使用_GLIBCXX_CXX11_ABI使用带有C++ 11/14功能的5.1之前的C++ ABI有什么影响?

手册:

在GCC 5.1版本中,libstdc ++引入了一个新的库ABI,其中包括std :: string和std :: list的新实现.这些更改对于符合2011 C++标准是必要的,该标准禁止写入时写入字符串并要求列表跟踪其大小.

可以使用_GLIBCXX_USE_CXX11_ABI宏来控制库标头使用旧的或新的ABI,而不管使用哪个"-std".

我想知道使用这种"兼容性ABI"的含义是什么?我猜小串操作的运行时性能会受到影响(我假设是负面的),并且列表大小访问从O(1)(C11 ABI)到O(N)(兼容性ABI).

  1. 我的猜测是否正确,任何人都可以详细说明吗?
  2. 我错过了其他影响吗?原子和并发功能怎么样?有什么影响?

c++ gcc abi

6
推荐指数
1
解决办法
225
查看次数

重命名石墨/格拉法纳表格面板中的列标题

我有一个表盘,它是时间序列聚合。我对除 Grafana 或 Graphite 提供的“公制”和“当前”标签之外的所有内容都很满意。

我可以覆盖这些标签吗?

graphite grafana

6
推荐指数
0
解决办法
1437
查看次数

使用std :: copy从ifstream读取十六进制值的序列

考虑一个包含以十六进制表示法表示的整数序列的文件.我可以像这样流式传输它们:

using namespace std;
ifstream infile(fname);
unsigned int i;
vector<unsigned int> vals;
while (infile >> std::hex >> i){
    vals.push_back(i);
}
Run Code Online (Sandbox Code Playgroud)

如果我想用同样的东西做什么怎么办istream_iterator

/// borks on hex:
copy(istream_iterator<unsigned int>(infile),
    istream_iterator<unsigned int>(), back_inserter(ref_data));
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉istream_iterator如何采用十六进制表示法?

c++

4
推荐指数
1
解决办法
132
查看次数

从机上的 Jenkins 工作空间路径不一致

我们设置了一些共享工作空间的工作。各个分支的工作流程是:

  • 构建一个名为foo.
  • 执行多个下游测试,每个测试都使用foo.

我们通过将Use custom workspace下游作业的字段分配给构建工作区来实现这一点。

最近,我们选择了一个分支,并将其分配给 Jenkins 从机而不是主机上构建。我惊讶地发现,在主服务器上,foo存储库被克隆到$JENKINS_JOBS_PATH/FOO/workspace/foo_repo- 而在从服务器上,存储库被克隆到$JENKINS_JOBS_PATH/FOO/foo_repo.

这是设计使然,还是我们以某种方式配置了主从不一致?

jenkins

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

我可以使用 std::copy 复制到 stringstream 吗

我最近遇到了一种情况,我想将int64_t值的原始字节放入字符串流中。在 C++17 中,我可以执行以下操作:

uint64_t val = 1984;
std::stringstream sstr;
sstr << "the byte value is " << std::string_view(reinterpret_cast<char*>(&val), sizeof(decltype(val)));
Run Code Online (Sandbox Code Playgroud)

而鲍勃是你的叔叔。但我需要用 C++98 或者 C++11 来做。我想这样做:

std::copy(reinterpret_cast<const char*>(&tmp_time),
          reinterpret_cast<const char*>(&tmp_time) + sizeof tmp_time,
          std::back_inserter(sstr));
Run Code Online (Sandbox Code Playgroud)

但是 g++ 在实例化 a 时抱怨back_inserter没有value_type在 a 中命名的类型basic_stringstream

我可以不std::copy进入一个stringstream对象吗?我该怎么做?请注意,上面是一个简单的例子,我不愿意放弃流语义,因为它们在实际上下文中非常整洁。

c++ stl

4
推荐指数
1
解决办法
485
查看次数

gcc将所有警告视为错误,除了X

由于最好的原因未提及,我想将所有警告视为错误,除了一个警告(已弃用),我想作为警告.

有没有更方便的方法来列出我想要手工处理的所有警告?

gcc warnings

3
推荐指数
1
解决办法
600
查看次数