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

时间:2016-01-15 02:10:57

标签: python c++ cython

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

因此,cython.pyx导入文件a.cppb.cppc.cpp以及constants.hpp

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

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

我习惯使用脚本语言(python,js),所以使用旧的C ++代码会让我失望一点,我确信这个问题的部分听起来像是我迟钝的所以,谢谢你对我耐心。

这些只是一些奇怪的依赖关系,我无法解开思想。

1 个答案:

答案 0 :(得分:2)

C ++在编译时将#include'd文件插入到代码中(技术上在编译时 - 在预处理器运行期间),因此无法在运行时更改这些值。

如果您有以下

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

您可以使用-E标志来查看编译器看到的内容,这将使其输出预处理的源。