2011-09-07 42 views
0

我正在寫一個python接口到一個C++庫,我想知道庫的正確設計。什麼是python-C++接口的代碼pythonic結構與許多功能?

我發現(困難的方式)所有傳遞給python的方法都必須聲明爲static。如果我理解正確,這意味着所有函數基本上都必須在同一個.cpp文件中定義。我的界面有很多功能,所以很快就會變得很難看。

處理這個問題的標準方法是什麼?我能想到的可能性:

  • 不用擔心它,並使用一個looong .cpp文件
  • 編譯成多個庫(.so文件)
  • 寫一個.cpp每組該.CPP到主CPP定義文件(一個與PyMethodDef)

的身體功能和#包括兩者似乎非常難看

回答

1

我已經發現(困難的方式)所有傳遞給python的方法必須被聲明爲靜態的 。如果我理解正確,這意味着所有 函數基本上必須在相同的.cpp文件中定義。我的 接口有很多功能,所以這個變得非常快。

你從哪裏找到的?這不是真的。關鍵字static在C++中表示兩種不同的東西。有類靜態,這意味着一個類範圍的函數被調用時沒有對象的實例(就像普通函數一樣)。還有靜態鏈接,這意味着您的函數不會被添加到全局偏移表中,並且在翻譯單元(CPP文件)之外找到它們會很困難。

我會建議看看Boost.Python。他們已經解決了許多你會遇到的問題,並且使得C++和Python相互交流變得非常容易。

0

爲什麼你說Python調用的所有函數都必須是 static?爲避免名稱衝突(因爲extern "C"由於任何名稱空間等都將被忽略 ),但是函數是否爲靜態 通常是這種情況,因此無關緊要。

當C++接口庫,以我的經驗,這是 通常不是一個大問題,使其靜態的,把所有的 功能在一個單一的翻譯單元,因爲 功能將只是小包裝其中調用實際的C++, ,通常會自動生成某種 描述文件;您當然不會手動編寫所有需要的樣板文件。

相關問題