Обернуть С API
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 04.04.17 09:42
Оценка:
Привет,
Есть C API работу с которым хочется обернуть т.к. для использования API надо выполнить некоторые рутинные вещи. Проблема в том, параметр в виде структуры передающиеся в функцию-обёртку могут иметь, а могут не иметь некоторых полей для заполнения, следовательно, нужно выбирать алгоритмы с разными рутинами. Я осилил создание шаблона HasField для проверки наличия поля в структуре честно сперев его на SO и не разобравщись как оно работает , но не понимаю как это использовать для выбора алгоритма.
Как я себе это представляю
  Скрытый текст
далее идёт код курильшика

template<typename T, typename = void>
struct HasField_abc : std::false_type { };
template<typename T>
struct HasField_abc<T, decltype(std::declval<T>().abc, void())> : std::true_type { };

template<typename T, typename  U = HasField_abc<T>::value>
void get(T& value);

// да, я понимю что частичная специализация не применима
template<typename T, std::true_type>
void get(T& value);
{
    // поле есть
    value.abc = c_api_do_stuff();

    c_api_get(value);
}

template<typename T, std::false_type>
void get(T& value);
{
    // поля нет
    c_api_get(value);
}

Хочется увидеть код здорового человека. Нужен С++11, желательно чтобы был совместим с C++0x, т.е. поддержка не очень свежим gcc.
Sic luceat lux!
Отредактировано 04.04.2017 9:54 Kernan . Предыдущая версия . Еще …
Отредактировано 04.04.2017 9:49 Kernan . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.