如何在通过 Cython 导入的 C++ 头文件中设置 运行 时间的常量?

How do I set constants at run-time in a c++ header file, imported through Cython?

我有一些 C++ 代码目前依赖于硬编码常量,这些常量被导入到多个其他 cpp 文件中,我希望我的 python (pyx) 文件在运行时设置一次常量。

因此,cython.pyx 导入文件 a.cppb.cppc.cppconstants.hpp

文件 a.cppb.cppc.cpp 全部导入 constants.hpp

我想要一个通用常量文件,例如 new_constants.yml,它 python 导入并发送到 cpp 文件。这也意味着(我认为)每次我想调整常量时我都不必重新编译 C 代码。

我已经习惯了脚本语言 (python, js),所以使用旧的 C++ 代码让我有点不适应,我敢肯定这个问题的某些部分听起来像我智障, 所以,谢谢你对我的耐心。

这些只是一些奇怪的依赖关系,我无法全神贯注地解开它。

C++ 在编译时按字面意思将 #include 的文件插入到代码中(从技术上讲,在编译时之前 - 在预处理器 运行 期间),因此无法在 [=] 处更改这些值36=]时间。

如果你有以下条件

foo.h

const int value = 42;

和foo.cpp

#include "foo.h"
int foo(){ return value; }

当你编译foo.cpp时,预处理器会用foo.h的确切内容替换cpp文件中的#include "foo.h",然后编译器会看到

const int value = 42;
int foo(){ return value; }

仅此而已

C++ 程序的原始源代码在编译完成后将被完全丢弃,并且再也不会被使用。

您可以看到编译器使用 gcc 的 -E 标志看到的内容,这将使它输出 pre-processed 源代码。