8

cgoでいくつかのC++コードを混在させることは可能ですか?

私はこれを試しました:

package main
/* 
    #include <iostream>

    extern "C" void test(const char* str)
    {
        std::cout << str;
    }
*/
// #cgo CFLAGS: -x c++
// #cgo LDFLAGS: -lstdc++
import "C"

func main() {
    C.test(C.CString("Testing!!!"))
}

しかし、私はこれらのエラーを受け取ります:

error: 'char* CString(_GoString_)' cannot appear in a constant-exp
error: 'void test(const char*)' cannot appear in a constant-expres
error: invalid conversion from 'char* (*)(_GoString_)' to 'long long int' [-fpermissive]
error: invalid conversion from 'void (*)(const char*)' to 'long long int' [-fpermissive]

go1.0.2とMinGW-w644.7.1を使用しています

4

1 に答える 1

11

@ephemientは、Goバグトラッカーでこの機能リクエストへのリンクを提供しました。これにより、GoでC++を使用する方法へのリンクが提供されました。ここスタックオーバーフローについて。そこには良い議論がありますが、私にとってのポイントは次のとおりです。

  1. Go FAQへのリンク(GoプログラムはC / C ++プログラムとリンクしていますか?):

    ... cgoプログラムは、GoコードからCライブラリを安全に呼び出すことができる「外部関数インターフェイス」のメカニズムを提供します。SWIGは、この機能をC++ライブラリに拡張します。

  2. GoのSWIGドキュメントへのリンク。

于 2012-07-10T05:59:02.930 に答える