Как написать концепцию итератора ввода перемещения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как написать концепцию итератора ввода перемещения?

Сообщение Anonymous »

Я хочу написать функцию, которая перемещает данные из контейнера в другой контейнер, используя пару итераторов.
У меня есть следующая концепция:

Код: Выделить всё

template 
concept move_input_iterator = std::input_iterator && std::same_as;
Я использую это так:

Код: Выделить всё

template 
sound create_sound(const sound_details& details, Iter begin, Iter end)
{
return sound{
.details = details,
.samples = {begin,end}
};
}

Код: Выделить всё

sounds[sound_key] = create_sound(
{
.pitch_min = short(sound_info->pitch_min),
.pitch_max = short(sound_info->pitch_max),
.volume_min = short(sound_info->volume_min),
.volume_max = short(sound_info->volume_max),
.is_looped = /*TODO:*/ true,
.radius = /*TODO:*/ 0,
},
std::make_move_iterator(samples.begin()),
std::make_move_iterator(samples.end()));
(

Код: Выделить всё

sound::samples
— это std::vector )
Я получаю следующую ошибку:

Код: Выделить всё

Game/src/common/sound.h:33:8: note: candidate template ignored: constraints not satisfied [with Iter = move_iterator]
33 |         sound create_sound(const sound_details& details, Iter begin, Iter end)
|               ^
Game/src/common/sound.h:32:12: note: because 'move_input_iterator' evaluated to false
32 |         template 
|                   ^
Game/src/common/iterator.h:12:61: note: because 'std::same_as' evaluated to false
12 |         concept move_input_iterator = std::input_iterator && std::same_as;
|                                                                    ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/concepts:65:9: note: because '__detail::__same_as' evaluated to false
65 |       = __detail::__same_as && __detail::__same_as;
|         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/concepts:59:27: note: because 'std::is_same_v' evaluated to false
59 |       concept __same_as = std::is_same_v;
Я понимаю саму ошибку, но не понимаю, почему std::is_same_v завершается с ошибкой,
когда std::make_move_iterator должен выполнить итератор перемещения (что должно привести к звуковому_образцу&&?)

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-iterator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»