Я использую две разные библиотеки в своем проекте, и обе они предоставляют базовый прямоугольник struct
. Проблема в том, что, похоже, нет способа вставить преобразование между типами, поэтому я не могу вызвать функцию в одной библиотеке с результатом из функции в другой. Если бы я был автором любого из них, я мог бы создавать конверсии извне, я не могу.
библиотека a:
typedef struct rectangle { sint16 x; sint16 y; uint16 w; uint16 h; } rectangle;
библиотека b:
class Rect {
int x; int y; int width; int height;
/* ... */
};
Теперь я не могу сделать конвертер class
, потому что C ++ будет искать преобразование только за один шаг. Вероятно, это хорошо, потому что было бы много возможностей, связанных с созданием новых объектов всех типов.
Я не могу сделать оператор, который берет struct
из a
и поставляет объект class
из b
:
foo.cpp:123 error: ‘operator b::Rect(const rectangle&)’ must be a nonstatic member function
Итак, есть ли разумный способ обойти это?
редактирование:
Возможно, мне следует также отметить, что мне бы очень хотелось какое-то решение, позволяющее работать с результатом без проблем, поскольку я не ожидаю, что стану этим кодером. (Хотя я согласен, старая школа, явное, преобразование было бы хорошим выбором. Другая ветвь, reinterpret_cast
имеет ту же проблему ..)
edit2:
На самом деле, ни одно из предложений на самом деле не отвечает на мой настоящий вопрос, Конрад Рудольф кажется правильным. C ++ на самом деле не может этого сделать. Отстой, но это правда. (Если это имеет какое-то значение, я собираюсь попробовать создать подклассы, как это предложено CodingTheWheel .