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

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

本文关键字:c++ 文件 设置 常量 导入 运行时 Cython      更新时间:2023-10-16

我有一些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文件插入到代码中,因此无法在运行时更改这些值。

如果您有以下情况

福.H

const int value = 42;

还有福.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++ 程序的原始源代码将被完全丢弃,并且永远不会再次使用。

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