Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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++ python-c++;与许多功能的接口?_C++_Python_Interface - Fatal编程技术网

C++ python-c++;与许多功能的接口?

C++ python-c++;与许多功能的接口?,c++,python,interface,C++,Python,Interface,我正在编写一个Python接口到C++库,我想知道库的正确设计。 我发现(困难的是)传递给python的所有方法都必须声明为静态的。如果我理解正确,这意味着所有函数基本上都必须在同一个.cpp文件中定义。我的界面有很多功能,所以很快就会变得难看 处理这个问题的标准方法是什么?我能想到的可能性: 不用担心,使用一个looong.cpp文件 编译到多个库(.so文件) 为每组函数编写一个.cpp,并#将该.cpp包含到主定义cpp文件(带有PyMethodDef的文件)的主体中 他们两个看起来都

我正在编写一个Python接口到C++库,我想知道库的正确设计。 我发现(困难的是)传递给python的所有方法都必须声明为静态的。如果我理解正确,这意味着所有函数基本上都必须在同一个.cpp文件中定义。我的界面有很多功能,所以很快就会变得难看

处理这个问题的标准方法是什么?我能想到的可能性:

  • 不用担心,使用一个looong.cpp文件
  • 编译到多个库(.so文件)
  • 为每组函数编写一个.cpp,并#将该.cpp包含到主定义cpp文件(带有PyMethodDef的文件)的主体中
他们两个看起来都很丑

我发现(困难的是)传递给python的所有方法都必须 被声明为静态的。如果我理解正确,这意味着 函数基本上必须在同一个.cpp文件中定义。我的 接口有很多函数,所以很快就会变得难看

你在哪里发现的?这不是真的。关键字<代码>静态<代码>意味着C++中的两个不同的东西。还有类static,这意味着调用类作用域函数时没有对象的实例(就像普通函数一样)。还有静态链接,这意味着您的函数不会被添加到全局偏移量表中,您将很难在翻译单元(CPP文件)之外找到它们


我建议你看看。他们解决了你遇到的许多问题,使C++和Python之间的对话变得非常容易。

为什么你说Python调用的所有函数都必须是 静止的这是通常的情况下,为了避免 名称冲突(因为将忽略任何命名空间等) 因为
外部“C”
),但是函数是否是静态的 不管有没有,都不重要

在C++中连接一个库时,以我的经验,它是 一般来说,让它保持静态并把所有的 函数在单个翻译单元中,因为 函数将是只调用实际C++的小包装器, 通常,会自动从某种类型的 描述符文件;你肯定不会写所有的东西 手工制作必要的样板