Как бороться с заголовочными файлами Daft - PullRequest
4 голосов
/ 03 декабря 2010

Я пытаюсь использовать сторонний SDK в коде C ++.Хотя SDK и заголовки технически совместимы с C ++, на самом деле это просто отвратительный кусок C.

В частности, в основных заголовочных файлах есть много сотен # определений, из которых они худшие.

#define     C  0       //Celsius
#define     F  1       //Fahrenheit
#define     R  2       // Rankine
#define     K  3       // Kelvin

Теперь вы можете себе представить, какие приятные сообщения об ошибках я получаю, когда пытаюсь использовать библиотеки повышения, в которых есть такие вещи:

template< typename F > struct template_arity;

Несколько тактических #undefs могли бы что-то исправить, но это все равноощущается как бомбаВ качестве альтернативы я мог бы переписать большие части стороннего заголовка или просто попытаться выделить те разделы, которые мне действительно нужны.

Есть ли лучшее решение этой проблемы?

Ответы [ 4 ]

8 голосов
/ 03 декабря 2010

Как насчет того, чтобы включить файлы-выключатели только в один файл .cpp, а затем просто предоставить необходимые функции через отдельный заголовок?

2 голосов
/ 03 декабря 2010

Вы можете обернуть стороннюю библиотеку за свой собственный интерфейс. Это позволяет вам включать только сторонний заголовок в исходный файл, без риска возиться с чем-либо еще. На самом деле это хороший совет: никогда не включайте сторонний заголовок в свой собственный заголовок. Всегда и только включайте сторонние заголовки в свои исходные файлы (.cpp).

Удачи!

2 голосов
/ 03 декабря 2010

Оригинальный автор переписал его для вас?

Серьезно, это похоже на случай очень плохого дизайна. Я бы переписал макросы, возможно, как enum с.

0 голосов
/ 03 декабря 2010

Вам действительно нужны эти значения в вашем коде или они используются только в своих заголовках внутри?

Вы можете написать новый заголовок, который будет включать после него заголовок, который отменяет оскорбительные определения, прежде чем включать что-либо еще.

Возможно, это не практично, но макросы вызывают такую ​​боль, так что, возможно, мало что можно сделать: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...