Какую концепцию использовать для проверки типа значения итератора?C++

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

Сообщение Anonymous »

Я новичок в концепциях и диапазонах/представлениях.
Я пытаюсь написать инициализацию класса, передавая последовательность значений, определенных итератором или диапазоном. /view.
Я могу проверить, являются ли аргументы функции итераторами или диапазонами. Но я не могу проверить, относятся ли значения, возвращаемые итераторами, к определенному типу.
Например (C++23):

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

#include 
#include 

struct Data {
int i;
std::string l;
};

struct DataContainer {
// iterator version
// QUESTION: how can I check that I handles "Data"?
template
void add(I start, S end) {
for (auto data = start; data != end; ++data) {
_data.push_back(*data);
}
}
// range/views version
// QUESTION: how can I check that R handles "Data"?
template
void add(R &&r) {
add(std::begin(r), std::end(r));
}
void dump() const {
for (const auto& d: _data){
std::print("[{},'{}'], ", d.i, d.l);
}
std::println();
}
std::vector _data;
};

int main()
{
std::vector init{{1, "one"}, {2, "two"}, {3, "three"}};
{
DataContainer dc;
dc.add(init.begin(), init.end());
dc.dump();
}
{
DataContainer dc;
dc.add(init);
dc.dump();
}
return 0;
}
Как проверить, что *start возвращает данные?


Подробнее здесь: https://stackoverflow.com/questions/791 ... value-type
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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