我正在製作一組框架。我正在製作一組框架。我想支持多種編程語言
我想支持多種編程語言。
我的問題是我應該用什麼語言作爲基礎?
有沒有一種方法來多個綁定?
我想支持所有這些編程語言。
C, C++, Java, Ruby, Perl, Python.
我正在製作一組框架。我正在製作一組框架。我想支持多種編程語言
我想支持多種編程語言。
我的問題是我應該用什麼語言作爲基礎?
有沒有一種方法來多個綁定?
我想支持所有這些編程語言。
C, C++, Java, Ruby, Perl, Python.
我會用C++實現庫。如果你需要C訪問,那麼這很容易手工完成,通過提供包含函數來獲得額外的「this」參數。
然而,在你開始之前,請閱讀SWIG文件,特別是它的限制和要避免的事情。如果你在設計你的C++接口時考慮到SWIG,你可以毫不費力地爲你生成許多語言的綁定。
編輯:這裏是一個C包裝爲C++類的一個簡單的例子。比方說,這是C++的類來包裝,讓我們把它test.h
:
class Test {
public:
Test();
int do_something(char* arg);
private:
is_valid(); // see below for why you need this method
};
這是你的C頭test_c.h
:
typedef void* TestHandle;
TestHandle newTest();
int deleteTest(TestHandle h);
int Test_do_something(TestHandle h, char* arg);
而且你的C實施將是一個C++文件使用C函數,讓我們說test_c.cpp
:
extern "C" TestHandle newTest()
{
return (void*)new Test();
}
extern "C" int deleteTest(TestHandle h)
{
Test* this = static_cast<Test*>(h);
if (!this->is_valid())
return -1; // here we define -1 as "invalid handle" error
delete this;
return 0; // here we define 0 as the "ok" error code
}
extern "C" int Test_do_something(TestHandle h, char* arg)
{
Test* this = static_cast<Test*>(h);
if (!this->is_valid())
return -1; // here we define -1 as "invalid handle" error
return this->do_something(arg);
}
的is_valid()
方法是有保證你不會傳遞一個壞的手柄。例如,您可以在所有實例中存儲magic number,然後is_valid()
只是確保幻數在那裏。
退房GObject - 這是一個開源的C庫,增加了對C面向對象的編程功能,並可以透明的a variety of languages創建綁定。
和它的夥伴Vala是一種面向對象的語言,可以編譯成C + GObject代碼,以幫助減少C + GObject的冗長度。
檢出SWIG「簡化包裝和界面生成器」。給定C或C++代碼,它可以以編程方式爲a variety of languages生成綁定。
我喜歡這個主意,但是你能展示一個C++ C包裝器的例子嗎? – zeitue
我用C包裝器例子更新了我的答案。 – Miguel
謝謝你,這將工作完美我在這裏是新的,當我得到積分我會投你,但我不能直到人們不再投票給我失望ps:在最後一個問題,你認爲有可能有C包裝與C++類相同的二進制文件,函數? – zeitue