Re[2]: Beautiful C API
От: GhostCoders Россия  
Дата: 03.04.17 06:22
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Зачем так, если можно так:

Интересно. Но думаю, может быть в следующей (0.5) версии это реализуем.
Тикет для этой идеи:
https://github.com/PetrPPetrov/beautiful-capi/issues/36
Третий Рим должен пасть!
Re[3]: Beautiful C API
От: vdimas Россия  
Дата: 03.04.17 09:47
Оценка:
Здравствуйте, GhostCoders, Вы писали:

GC>Интересно. Но думаю, может быть в следующей (0.5) версии это реализуем.


Да, на один уровень косвенности получается меньше, если надо реализовывать семантику уникального или расшаренного владения.
Причем, при таком подходе у нас обязательно будет либо уникальное, либо расшаренное владение, бо с голым указателем работать страшно. ))

Т.е. дополнительно потребуется:
— Запретить публичные конструкторы, чтобы не создавать Printer по-значению, не копировать и не наследоваться от него.
— Снабдить каждый такой тип статической фабрикой:
class Printer {
public:
...
    static Printer * create() {
        return new Printer();
    }
};


С другой стороны, есть такая идиома — AutoValue, допиливаем её до указателей:
template<typename T>
class AutoPtr : public unique_ptr<T> {
public:
    AutoPtr() : unique_ptr<T>(T::create()) {}
};

typedef unique_ptr<Printer> PrinterPtr;
typedef AutoPtr<Printer> PrinterAutoPtr;


Еще можно в AutoPtr добавить некий template-template параметр SmartPtr=unique_ptr по-умолчанию, чтобы выбирать способ владения.
Re: Beautiful C API
От: Zhendos  
Дата: 06.05.17 11:03
Оценка:
Здравствуйте, GhostCoders, Вы писали:

GC>То есть средство должно быть как можно легковесней, не быть очередным COM.


GC>У Swig есть С-генератор, но он вроде заброшен.

GC>Плюс Swig парсит C++\C заголовки, я же планирую облегчить себе жизнь,
GC>вводя описание API как внешние XML файлы в формализированном виде.

GC>Кто что думает?



Если это проект нацеленный на реальное использование,
то доработка swig по-моему почти единственный вариант.

Тем более не стоит забывать, что почти все "обертки" для использования
C/C++ из других языков которые генерирует swig, это на самом "C" API.

Например для использования C++ из Java для класса:

class Foo {
public:
  void f();
};


swig сгенерирует что-то типа:

extern "C" void Java_com_package_Foo_f(JNIEnv *env, jobject thiz)
{
   Foo *foo = convert(thiz);
   foo->f();
}


тоже самое для Python, PHP и т.д., т.е. в каждом случае будет генерироваться
C API, сделать плюс один вариант по-моему намного легче чем реализовывать swig еще раз.
Re: Beautiful C API
От: alexanderfedin США http://alexander-fedin.pixels.com/
Дата: 15.10.20 09:54
Оценка:
Очень сильно рекомендую посмотреть на то, как в C реализуется COM API.
Respectfully,
Alexander Fedin.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.