Простое (хотя, возможно, не единственное) решение:
Напишите тонкую прокладку привязки C ++ для вашей библиотеки C.
Поскольку ваша библиотека содержит код C, которыйне совместим с C ++ - не входит в общее подмножество обоих языков - вы должны написать привязки, которые C ++ может использовать.Они должны быть написаны на C, а не на C ++ .
Давайте назовем файлы привязки, которые вы пишете, frr_cpp_bindings.h
и frr_cpp_bindings.c
.
Файл заголовка shim, frr_cpp_bindings.h
, будет по существу представлять то же самое, что и libfrr.h
, но без какого-либо фактического кода (например, ./r.inf = &_frrmod_info
) - только определения функций и типов, которые находятся в общем подмножествеC ++ и C.
Реализация этого shim (frr_cpp_bindings.c
) будет включать libfrr.h
напрямую и в основном просто перенаправлять вызовы к libfrr.h
-объявленным функциям C.
Наконец, вВ файле frr_cpp_bindings.h
вы можете получить что-то вроде этого:
#ifdef __cplusplus
extern "C" {
#endif
// all of the actual C code
#ifdef __cplusplus
}
#endif
, и это означает, что вам не нужно extern "C"
в коде C ++.
Наконец, ваш C ++исходные файлы будут иметь:
#include <frr_cpp_bindings.h>
и не будут пытаться напрямую включить несовместимый заголовок.