External C++ symbol links

This theme includes an optional sphinx_immaterial.apidoc.cpp.external_cpp_references extension that allows normal C++ symbol references, e.g. through the cpp:expr role or in C++ function signatures, to resolve to externally-defined C++ symbols that are manually specified in conf.py. Unlike the sphinx.ext.intersphinx extension, template arguments are stripped when resolving references, which allows template entities to be resolved based on their base name.

To use this extension, add it to the list of extensions in conf.py and define the external_cpp_references configuration option:

extensions = [
    # other extensions...
external_cpp_references = {
    "nlohmann::json": {
        "url": "https://json.nlohmann.me/api/json/",
        "object_type": "type alias",
        "desc": "C++ type alias",
    "nlohmann::basic_json": {
        "url": "https://json.nlohmann.me/api/basic_json/",
        "object_type": "class",
        "desc": "C++ class",
.. cpp:function:: int ExtractValueFromJson(::nlohmann::json json_value);

   Extracts a value from a JSON object.
int ExtractValueFromJson(::nlohmann::json json_value);

Extracts a value from a JSON object.

external_cpp_references : dict[str, ExternalCppReference] = {}

Specifies for each symbol name a dictionary specifying the URL, object type, and description type:

class ExternalCppReference(typing.TypedDict):
    url: str
    object_type: str
    desc: str

The object_type should be one of the object types defined by the C++ domain:

  • "class"

  • "union"

  • "function"

  • "member"

  • "type"

  • "concept"

  • "enum"

  • "enumerator"

Last update: Sep 30, 2022