LINUX.ORG.RU

Wrapper в плюсах

 ,


0

1

Привет.
Есть древовидная структура данных и wrapper над С-библиотекой. Я каждому узлу дерева передаю wrapper в конструкторе, а потом пускаю по верхним узлам цикл (каждый узел пускает свой цикл), чтобы обработать данные.
Мне кажется не совсем элегантно иметь wrapper каждый раз в конструкторе, может быть проще/правильнее сделать его singleton'ом и просто дёргать каждый раз? (из одного потока)
Кто что посоветует?

★★★★★

Последнее исправление: beastie (всего исправлений: 1)

Если ты имеешь в виду, что враппер появляется в конструкторе публичного API, то можно его просто спрятать в private-реализацию.

И как бонус приватной реализации, пользовательскому коду будут вообще не нужны заголовочные файлы сишной библиотеки.

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 2)

Какие проблемы решает враппер? У враппера есть внутреннее состояние?

anonymous
()
Ответ на: комментарий от staseg

Если ты имеешь в виду, что враппер появляется в конструкторе публичного API, то можно его просто спрятать в private-реализацию.

Я не совсем понял, что ты имел ввиду )

И как бонус привотной реализации, пользовательскому коду будут вообще не нужны заголовочные файлы сишной библиотеки.

Этого не избежать, я не храню специфичные данные во враппере (грубо говоря, у него вообще нет своих данных), а в узлах дерева.

UVV ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Какие проблемы решает враппер?

Обёртка над С библиотекой, немного memory management

У враппера есть внутреннее состояние?

нет.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

По-моему у орхитекторов это называется PIMPL.

В публичном классе держишь указатель на объект скрытого (определенного внутри .срр) класса реализации. В конструкторы этого класса можно передавать врапперы, не боясь загадить основной интерфейс.

staseg ★★★★★
()
Ответ на: комментарий от staseg

По-моему у орхитекторов это называется PIMPL.

pimpl подразумевает же скрытую реализацию о объекта. У враппера же функционал одинаковый, по сути это один и тот же объект будет везде.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

нет.

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

nanoolinux ★★★★
()
Ответ на: комментарий от nanoolinux

Нормальные люди в таком случае делают набор свободных функций, а не класс со статическими функциями-членами.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Нормальные люди в таком случае делают набор свободных функций, а не класс со статическими функциями-членами.

Логично, но тогда можно использовать уже имеющиеся С-функции и делать ничего не надо будет.

UVV ★★★★★
() автор топика
Ответ на: комментарий от nanoolinux

Вызовы короче =)
Но да, ты прав, в принципе одно и то же получается.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Логично, но тогда можно использовать уже имеющиеся С-функции и делать ничего не надо будет.

Возвращаемся к вопросу: «А врапер то чем в данный момент занимается?»

anonymous
()
Ответ на: комментарий от anonymous

Okay.
Если можно, осветите тему в общем. Когда имеет смысл писать враппер для С-библиотеки и в каком виде (обычный класс, синглтон, набор функций).

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Если у враппера есть внутреннее состояние - это класс. Если внутреннее состояние должно быть общим для всех - это синглтон. Если нет внутреннего состояния - это просто набор функций.

И это не только для враппера, это для любого набора функций.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.