2012-05-31 2 views
4

Я написал класс оболочки для строки ICU, и у меня есть компилятор с поддержкой перемещения, но ICU не предоставляет конструктор перемещения. Мне также не удалось найти функцию swap(), которую я мог бы использовать для выполнения этой работы. Как я могу реализовать семантику перемещения для строки ICU?Переместить конструктор для строки ICU

+1

Я полагаю, что перегрузка/специализация 'std :: move' для' icu :: string' не будет сокращать его? EDIT: ICU является открытым исходным кодом, не так ли? Почему бы просто не исправить класс, чтобы иметь конструктор перемещения? – rubenvb

+2

@rubenvb 'std :: move' работает только на уровне уровня. Он просто меняет категорию значений аргумента на rvalue. Помимо этого, это функция идентификации. –

+0

@rubenvb Вы имели в виду патч-источник, а затем вносить исправление, верно? –

ответ

4

Если у вас все в порядке с разыменованием указателя каждый раз, когда вы обращаетесь к строке (я бы этого не делал), вы всегда можете сохранить строку icu в std::unique_ptr, тогда перемещение будет таким же простым, как перемещение указателя ,

MyWrapper(MyWrapper && that) 
    :str_ptr(std::move(that.str_ptr)) 
{} 

Лично я чувствовал бы себя лучше, фактически изменяя источник ICU.

+0

, вероятно, должен подать билет против ICU. Или даже, внести свой вклад в источник. –

+0

Я думал, что видел билет на этом, но я не могу его найти. –

+0

билет находится по адресу http://www.icu-project.org/trac/ticket/10086 с соответствующим по адресу http://www.icu-project.org/trac/ticket/8324 – Dane

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