小编Emi*_* D.的帖子

C++中外部库的命名空间

我试图链接到一个外部库,我无法控制,它的功能没有任何名称空间.

因为我不希望与该库中定义的名称发生冲突:如何将外部头文件包含在我自己创建的命名空间中?

我知道以下代码不起作用,但问题的精神在于:

namespace extLib {
  #include "externalFolder/externalHeader.h"
}
Run Code Online (Sandbox Code Playgroud)

c++

8
推荐指数
1
解决办法
1520
查看次数

Pybind11:带有 lambda 的 init<>

我使用 pybind11 作为 C++ 代码到 python 库的包装器。

碰巧有些参数我无法提供,或者有时我想进行我在 C++ 方面知道的转换/初始化。例如,这可能是因为该类在 python 中是未知的。怎么可能呢?到目前为止,我看到的唯一“解决方案”是在 C++ 中创建一个继承的代理类。

示例:我想定义/绑定一个 python 类 A:

class A:
  def __init__(self, B b):
    ...
Run Code Online (Sandbox Code Playgroud)

使用 C++ 等效类:

class A {
  A(C c, D d);
}
Run Code Online (Sandbox Code Playgroud)

我可以为 pybind11::init<> 创建某种 lambda 或等效函数吗?

c++ python pybind11

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

C ++中的可移植分支预测提示

在StackOverflow上已经解决了两次分支预测的问题。但是,我没有找到想要的答案。
在优化阶段,我需要避免分支预测错误。我需要做一些验证。看起来像:

if(!successCondition)
    { throw Something(); }
Run Code Online (Sandbox Code Playgroud)

当然,在大多数情况下会发生的正常预期工作流中,我们不会抛出异常,因此也不会输入if。

我知道,在常见的if / else范例中,我们可以通过将最可能的分支放在if中,而将不太可能的分支放在else中来提示编译器(Portable分支预测提示)。但是我不想(由于可读性)链接ifs:

if(successCondition)
    { whatever(); }
else
    { throw Something(); }
Run Code Online (Sandbox Code Playgroud)

因此,我了解到,默认情况下,编译器将支持if中的条目,并且我会得到分支预测错误。

我知道gcc具有优化代码的特定功能,这在Linux内核中不太可能被调用(支持分支的编程)。但这不是可移植的,我需要编写代码。

有没有办法在C ++中具有可移植的正确分支预测?

c++ branch-prediction

5
推荐指数
1
解决办法
955
查看次数

标签 统计

c++ ×3

branch-prediction ×1

pybind11 ×1

python ×1