Skip to main content

Professional C++ Python bindings with type-generic templates, pystubs and native threading

Project description

IncludeCPP

Write C++ code, use it in Python. Auto-generates pybind11 bindings.

pip install IncludeCPP

Setup

includecpp init

Creates cpp.proj, include/, plugins/.

Write C++ Code

Put your code in namespace includecpp:

// include/fast_list.cpp
#include <vector>

namespace includecpp {

class FastList {
public:
    void append(int val) { data.push_back(val); }
    int get(int i) { return data[i]; }
private:
    std::vector<int> data;
};

int add(int a, int b) { return a + b; }

}  // namespace includecpp

Without namespace includecpp, your code won't be found.

Generate Plugin

includecpp plugin fast_list include/fast_list.cpp

Creates plugins/fast_list.cp with detected classes, methods, functions.

Build

includecpp rebuild

Or includecpp build (same thing).

Use in Python

from includecpp import fast_list

my_list = fast_list.FastList()
my_list.append(42)
print(fast_list.add(1, 2))  # 3

Or classic style:

from includecpp import CppApi

api = CppApi()
fast_list = api.include("fast_list")

Commands

Command What it does
init Create project structure
plugin <name> <files> Generate .cp from C++
rebuild / build Compile modules
get <module> Show module API
install <name> Install community module
update Update IncludeCPP
bug Report issue
--doc Show docs

rebuild options

includecpp rebuild --clean          # Full rebuild
includecpp rebuild --verbose        # See compiler output
includecpp rebuild -m crypto        # Rebuild specific module
includecpp rebuild -j 8             # 8 parallel jobs

Plugin Syntax (.cp files)

SOURCE(fast_list.cpp) fast_list

PUBLIC:

fast_list CLASS(FastList) {
    CONSTRUCTOR()
    METHOD(append)
    METHOD(get)
}

fast_list FUNC(add)

Overloaded Methods

MODULE CLASS(Circle) {
    METHOD_CONST(intersects, const Circle&)
    METHOD_CONST(intersects, const Rect&)
}

Templates

MODULE TEMPLATE_FUNC(maximum) TYPES(int, float, double)

MODULE STRUCT(Point) TYPES(int, float) {
    FIELD(T, x)
    FIELD(T, y)
}

Dependencies

DEPENDS(math_utils, geometry)

VSCode Support

Generates .pyi stubs automatically. Full autocomplete works.

Enable in cpp.proj:

{
  "CPI-IntelliSense": true
}

cpp.proj

{
  "project": "MyProject",
  "include": "/include",
  "plugins": "/plugins",
  "compiler": {
    "standard": "c++17",
    "optimization": "O3"
  }
}

Requirements

  • Python 3.8+
  • C++ compiler (g++, clang++, MSVC)
  • pybind11 (installed automatically)

Notes

  • Builds go to AppData/IncludeCPP, source stays clean
  • SHA256 change detection, only rebuilds what changed
  • Parallel compilation by default

MIT License | v2.9.5 | GitHub

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

includecpp-2.9.5.tar.gz (92.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

includecpp-2.9.5-py3-none-any.whl (98.7 kB view details)

Uploaded Python 3

File details

Details for the file includecpp-2.9.5.tar.gz.

File metadata

  • Download URL: includecpp-2.9.5.tar.gz
  • Upload date:
  • Size: 92.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for includecpp-2.9.5.tar.gz
Algorithm Hash digest
SHA256 636032af54f5336d3fc045724e61a128fd3025b65a4361954ac4526ed17aacf4
MD5 b66fd8ef843cb86d7b26b4b07c928649
BLAKE2b-256 bd6d2a40ec6de2d1579b3a21b06ebd0f4b2eb75d62ea17d8936afc94500a12d6

See more details on using hashes here.

File details

Details for the file includecpp-2.9.5-py3-none-any.whl.

File metadata

  • Download URL: includecpp-2.9.5-py3-none-any.whl
  • Upload date:
  • Size: 98.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for includecpp-2.9.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6f78608a86e859ab0e0b267f9381897d960157a88b670e07ec53c2d33892ac8a
MD5 659c97046e0ffb5c3f415b9e0262a332
BLAKE2b-256 4aea61950b75c9eb5a400b8b2f3eea7fe40cf84ef205272223c100ac08c3d480

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page