如何在通过 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.cpp
、b.cpp
、c.cpp
和 constants.hpp
文件 a.cpp
、b.cpp
和 c.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 源代码。
我有一些 C++ 代码目前依赖于硬编码常量,这些常量被导入到多个其他 cpp 文件中,我希望我的 python (pyx) 文件在运行时设置一次常量。
因此,cython.pyx
导入文件 a.cpp
、b.cpp
、c.cpp
和 constants.hpp
文件 a.cpp
、b.cpp
和 c.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 源代码。