كيفية استخدام كود C++ في Go: استدعاء الدوال والكلاسات من C++ عبر C
مرحبًا بالجميع! أكتب بلغة Go منذ حوالي عام، والآن واجهت مهمة حيرتني. لدي مكتبة كبيرة بلغة C++ تنفذ منطقًا معقدًا لمعالجة الصور. أريد استخدامها في مشروع Go الخاص بي، لكني لا أعرف كيفية تنظيم استدعاء دوال C++ من Go بشكل صحيح.
قرأت أن Go يمكنه التفاعل مع C عبر cgo، لكن C++ قصة مختلفة تمامًا. جربت كتابة مثال بسيط: يوجد كلاس ImageProcessor بلغة C++ مع دالة process() تستقبل مصفوفة بايت وتعيد النتيجة. أنشأت wrapper بلغة C، لكن عند الربط تظهر أخطاء "undefined reference". إليك مثال كودي:
```go
package main
/*
#include "image_processor.h"
*/
import "C"
import "fmt"
func main() {
data := []byte{1, 2, 3, 4, 5}
result := C.process_image(&data[0], C.int(len(data)))
fmt.Println(result)
}
```
وملف header بلغة C++:
```cpp
// image_processor.h
class ImageProcessor {
public:
int process(unsigned