Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c+;中的运行时设置常量+;头文件,通过Cython导入? 我有一些C++代码,这些代码目前依赖于硬编码的常量,这些常数被导入到多个其他CPP文件中,我希望我的Python(pyx)文件在运行时设置一次常量。_Python_C++_Cython - Fatal编程技术网

如何在c+;中的运行时设置常量+;头文件,通过Cython导入? 我有一些C++代码,这些代码目前依赖于硬编码的常量,这些常数被导入到多个其他CPP文件中,我希望我的Python(pyx)文件在运行时设置一次常量。

如何在c+;中的运行时设置常量+;头文件,通过Cython导入? 我有一些C++代码,这些代码目前依赖于硬编码的常量,这些常数被导入到多个其他CPP文件中,我希望我的Python(pyx)文件在运行时设置一次常量。,python,c++,cython,Python,C++,Cython,因此,cython.pyx导入文件a.cpp,b.cpp,c.cpp,以及constants.hpp 文件a.cpp、b.cpp和c.cpp都导入常量.hpp 相反,我希望有一个通用常量文件,例如new_constants.yml,python将其导入并发送到cpp文件。这也意味着(我想)我不必每次调整常量时都重新编译c代码 我习惯于编写语言(Python,JS),所以用旧C++代码工作有点让我厌烦,我相信这个问题的部分听起来像是我的智障,所以谢谢你对我有耐心。 这些只是一些奇怪的依赖项,我无法

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

文件
a.cpp
b.cpp
c.cpp
都导入
常量.hpp

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

我习惯于编写语言(Python,JS),所以用旧C++代码工作有点让我厌烦,我相信这个问题的部分听起来像是我的智障,所以谢谢你对我有耐心。


这些只是一些奇怪的依赖项,我无法将其解包。

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

如果你有以下几点

福安

和foo.cpp

#include "foo.h"
int foo(){ return value; }
编译foo.cpp时,预处理器将替换
foo.h
的确切内容以替换
#在cpp文件中包含“foo.h”
,然后编译器将看到

const int value = 42;
int foo(){ return value; }
没有别的了

< > C++程序的原始源代码在编译完成后不再被完全丢弃。


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

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

如果你有以下几点

福安

和foo.cpp

#include "foo.h"
int foo(){ return value; }
编译foo.cpp时,预处理器将替换
foo.h
的确切内容以替换
#在cpp文件中包含“foo.h”
,然后编译器将看到

const int value = 42;
int foo(){ return value; }
没有别的了

< > C++程序的原始源代码在编译完成后不再被完全丢弃。


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

如果您经常调整这些常量,它们可能不应该是常量。您可以传递一些配置对象,这些配置对象具有一些合理的默认值,如果需要可以重写这些值。您要设置的是全局变量,而不是常量。加载一个yml文件并设置全局变量是完全可行的。如果你经常调整这些常量,也许它们不应该是常量。您可以传递一些配置对象,这些配置对象具有一些合理的默认值,如果需要可以重写这些值。您要设置的是全局变量,而不是常量。加载一个yml文件并设置全局变量是完全可行的。那么,我的pyx代码是否需要将这些“常量”作为参数传递给相关函数?还有其他方法吗?如果您不坚持使用无法更改的旧库,那么有很多选择。你的建议是一个。您可以将系统更改为动态查找其他数据源中的值的系统……那么,我的pyx代码是否需要将这些“常量”作为参数传递给相关函数?还有其他方法吗?如果您不坚持使用无法更改的旧库,那么有很多选择。你的建议是一个。您可以将系统更改为从其他数据源动态查找值的系统。。。