Cool method to use LLM to build cross language interfaces

4 points by vadiml 11 months ago | 0 comments
Here is a cool tip on how to use hashtag#LLM to build cross-language interfaces. I did it with hashtag#ChatGPT-4o but it will probably work with others.

Here is my prompt: I need to use following c++ class from python code: class TestIt { public: std::string f1, f2;

std::string getf1() const { return f1; } };

And here is what I get as output: To use a C++ class from Python, you can use a tool like `pybind11`, which allows you to create Python bindings for C++ code. Here is a step-by-step guide to expose your `TestIt` class to Python:

### Step 1: Write the C++ Code

First, let's create a header file (`test_it.h`) and an implementation file (`test_it.cpp`) for your C++ class:

*test_it.h:*

```cpp hashtag#ifndef TEST_IT_H hashtag#define TEST_IT_H

hashtag#include <string>

class TestIt { public: std::string f1, f2;

std::string getf1() const { return f1; } };

hashtag#endif // TEST_IT_H ```

*test_it.cpp:*

```cpp hashtag#include "test_it.h"

```

### Step 2: Write the pybind11 Binding Code

Create a new C++ file for the pybind11 bindings, say `bindings.cpp`:

*bindings.cpp:*

```cpp hashtag#include <pybind11/pybind11.h> hashtag#include <pybind11/stl.h> hashtag#include "test_it.h"

namespace py = pybind11;

PYBIND11_MODULE(testit, m) { py::class_<TestIt>(m, "TestIt") .def(py::init<>()) // Bind the default constructor .def_readwrite("f1", &TestIt::f1) // Bind the public member f1 .def_readwrite("f2", &TestIt::f2) // Bind the public member f2 .def("getf1", &TestIt::getf1); // Bind the getf1 method } ```

### Step 3: Build the Python Module

To compile the code, you need to have `pybind11` installed and properly set up. You can install `pybind11` using pip:

```sh pip install pybind11 ```

Create a `CMakeLists.txt` file to handle the build process:

*CMakeLists.txt:*

```cmake cmake_minimum_required(VERSION 3.10) project(testit)

set(CMAKE_CXX_STANDARD 14)

find_package(pybind11 REQUIRED)

add_library(testit MODULE bindings.cpp test_it.cpp) target_link_libraries(testit PRIVATE pybind11::module) ```

### Step 4: Compile the Module

Run the following commands to compile your module:

```sh mkdir build cd build cmake .. make ```

This will generate a shared library file (`testit.so` on Linux, `testit.pyd` on Windows) that you can import in Python.

### Step 5: Use the Module in Python

Finally, you can use your C++ class in Python:

*test.py:*

```python import testit

# Create an instance of TestIt test_instance = testit.TestIt()

# Set values for f1 and f2 test_instance.f1 = "Hello" test_instance.f2 = "World"

# Get the value of f1 using the method print(test_instance.getf1()) # Output: Hello

# Print the value of f2 directly print(test_instance.f2) # Output: World ```

### Additional Notes

- The `pybind11` library should be correctly installed and discoverable by CMake. - Adjust the `CMakeLists.txt` if you have additional include directories or dependencies.

By following these steps, you should be able to use your C++ class `TestIt` in Python seamlessly.