2010-12-03 3 views
4

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

В частности, в файлах основного заголовка имеется много сотен #define, из которых они хуже всего.

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

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

template< typename F > struct template_arity; 

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

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

+0

+1 для ... вау – Thanatos 2010-12-03 16:30:38

+2

Вы в основном ввинчивается – 2010-12-03 16:36:22

ответ

2

Имейте первоначального автора переписать его для вас?

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

8

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

2

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

Удачи вам!

0

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

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

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

Смежные вопросы