Size: a a a

2020 July 13

AD

Andrii D in pro.cxx
Привет, есть вопросы по  boost::interprocess::file_mapping и boost::interprocess::mapped_region: я правильно понимаю что нет возможности писать в конец мепинга и таким образом увеличивать файл? Если так, то следующий вопрос: если я использую fstream для этих целей, то как можно ремапить файл в память? Только через создание новых объектов file_mapping и mapped_region?
источник

d

disba1ancer in pro.cxx
🎄🎊 R 🎅 Tb| ✡️ 🎊🎄
В 20 стандарте корутины будут
Уже есть
источник

m

magras in pro.cxx
Alexander Zaitsev
у нас тут вроде как не Rust, где товарищи на полном серьёзе рассказывают, что unstable в проде - это норма
На сколько я могу судить nightly обычно используют ради синтаксического сахара для async. Там сейчас примерно та же ситуация что в плюсах: часть в stable, но рантаймы не стандартизированны и война между ними хоть и поутихла, но продолжает тлеть.
источник

AP

Antony Polukhin in pro.cxx
Прикольно, чуваку зашла идея Aggregates are named tuples и он поназаводил тикетов в компиляторах на добавление интринсиков в GCC , Clang и MSVC
источник

CD

Constantine Drozdov in pro.cxx
Antony Polukhin
Прикольно, чуваку зашла идея Aggregates are named tuples и он поназаводил тикетов в компиляторах на добавление интринсиков в GCC , Clang и MSVC
А напомните, хоть один минус нашелся? Помню, что вы приводили просто ужасные примеры про инициализацию агрегатов
источник

AP

Antony Polukhin in pro.cxx
А пока не рассматривали
источник

t

tamtakoe in pro.cxx
Может кто-нибудь написать такую функцию на Си++?
/**
* Group items by field
*
* items =
*   [{id: 1, name: 'A', i: 1}, {id: 2, name: 'B', i: 2}, {id: 3, name: 'A', i: 3}, {id: 4, name: 'B', i: 4}, {id: 5, name: 'A', i: 5}]
*
* groupByField(items, 'name', ['i']) =
*   [
*     {
*       groupField: 'name',
*       groupValue: 'A',
*       items: [{id: 1, name: 'A', i: 1}, {id: 3, name: 'A', i: 3}, {id: 5, name: 'A', i: 5}],
*       id: 1, //First value
*       i: 9   //Summed value
*     }, {
*       groupField: 'name',
*       groupValue: 'B',
*       items: [{id: 2, name: 'B', i: 2}, {id: 4, name: 'B', i: 4}],
*       id: 2,
*       i: 6
*     }
*   ]
*
* @param items - Array<any> - items array
* @param field - string - field name
* @param sumFields - Array<string> - array with names of fields which should be summed
* @returns Array<any>
*/
function groupByField(items, field, sumFields = []) {
 const itemsByField = new Map() // We need correct order of items
 const sumReducer = (fieldName) => (prev, next) => (prev + next[fieldName] || 0);
 const result = [];

 for (let i = 0; i < items.length; i++) {
   const item = items[i];
   const groupKey = item[field];
   const groupedCollection = itemsByField.get(groupKey) || [];

   if (!groupedCollection.length) {
     itemsByField.set(groupKey, groupedCollection);
   }

   groupedCollection.push(item);
 }

 for (const entry of itemsByField) {
   const key = entry[0];
   const items = entry[1];
   const aggregatedItem = { ...items[0] }; // Copy first item

   // Calculate values which should be summed
   for (let j = 0; j < sumFields.length; j++) {
     const fieldName = sumFields[j];

     aggregatedItem[fieldName] = items.reduce(sumReducer(fieldName), 0)
   }

   aggregatedItem.groupField = field;
   aggregatedItem.groupValue = key;
   aggregatedItem.items = items;

   result.push(aggregatedItem);
 }

 return result;
}
источник

VD

Vlad Doc in pro.cxx
tamtakoe
Может кто-нибудь написать такую функцию на Си++?
/**
* Group items by field
*
* items =
*   [{id: 1, name: 'A', i: 1}, {id: 2, name: 'B', i: 2}, {id: 3, name: 'A', i: 3}, {id: 4, name: 'B', i: 4}, {id: 5, name: 'A', i: 5}]
*
* groupByField(items, 'name', ['i']) =
*   [
*     {
*       groupField: 'name',
*       groupValue: 'A',
*       items: [{id: 1, name: 'A', i: 1}, {id: 3, name: 'A', i: 3}, {id: 5, name: 'A', i: 5}],
*       id: 1, //First value
*       i: 9   //Summed value
*     }, {
*       groupField: 'name',
*       groupValue: 'B',
*       items: [{id: 2, name: 'B', i: 2}, {id: 4, name: 'B', i: 4}],
*       id: 2,
*       i: 6
*     }
*   ]
*
* @param items - Array<any> - items array
* @param field - string - field name
* @param sumFields - Array<string> - array with names of fields which should be summed
* @returns Array<any>
*/
function groupByField(items, field, sumFields = []) {
 const itemsByField = new Map() // We need correct order of items
 const sumReducer = (fieldName) => (prev, next) => (prev + next[fieldName] || 0);
 const result = [];

 for (let i = 0; i < items.length; i++) {
   const item = items[i];
   const groupKey = item[field];
   const groupedCollection = itemsByField.get(groupKey) || [];

   if (!groupedCollection.length) {
     itemsByField.set(groupKey, groupedCollection);
   }

   groupedCollection.push(item);
 }

 for (const entry of itemsByField) {
   const key = entry[0];
   const items = entry[1];
   const aggregatedItem = { ...items[0] }; // Copy first item

   // Calculate values which should be summed
   for (let j = 0; j < sumFields.length; j++) {
     const fieldName = sumFields[j];

     aggregatedItem[fieldName] = items.reduce(sumReducer(fieldName), 0)
   }

   aggregatedItem.groupField = field;
   aggregatedItem.groupValue = key;
   aggregatedItem.items = items;

   result.push(aggregatedItem);
 }

 return result;
}
Дружок пирожок, биржа фриланса двумя блоками ниже.
источник

t

tamtakoe in pro.cxx
Не, я для самообучения)
источник

D

Danya in pro.cxx
tamtakoe
Не, я для самообучения)
Ну так и пиши сам)
источник

t

tamtakoe in pro.cxx
Это серьезно так сложно на Си++ делается, что вы меня на Фриланс посылаете?
источник

VD

Vlad Doc in pro.cxx
tamtakoe
Не, я для самообучения)
Так тем более пиши сам.
источник

K

Konstantin in pro.cxx
Нет, просто еда стоит денег
источник

D

Danya in pro.cxx
Так, человек хватит оффтопить
источник

D

Danya in pro.cxx
Группа для новичков — @supapro, но и там никто не будет тебе писать программу
источник

t

tamtakoe in pro.cxx
Vlad Doc
Так тем более пиши сам.
Конкретно в данном случае я гораздо большему научусь, если посмотрю как это делают люди, знающие язык. Я вам на JS лучше что-нибудь напишу)
источник

VD

Vlad Doc in pro.cxx
tamtakoe
Конкретно в данном случае я гораздо большему научусь, если посмотрю как это делают люди, знающие язык. Я вам на JS лучше что-нибудь напишу)
Так возьми книгу и учись. В чём проблема?
источник

VD

Vlad Doc in pro.cxx
Или хелловорлд слишком мейнстрим надо сразу код жс на С++ переписывать?)
источник

D

Danya in pro.cxx
Допустим я пишу либу
И допустим я хочу поддержать концепты в либе и у меня есть два способа
1)
template<MYLIB_CONSTRAINT(constraint_expression) T>
Который будет раскрываться в typename при стандарте < 20
2)
template<typename T>
MYLIB_REQUIRES(constraint_expression)
Который при стандарте < 20 будет раскрываться в пустоту
Есть ли какая-то принципиальная разница в этих примерах и какой бы выбрали сами?
источник

CD

Constantine Drozdov in pro.cxx
Antony Polukhin
А пока не рассматривали
Да, вроде я уже указывал, что в группу "аргументация" можно дописать про явную похожесть structured binding к кортежам и агрегатами.

Возможно, нужно явно указывать, что в цепочке
Case 2: if E is a non-union class type and std::tuple_size<E> is a complete type with a member named value (regardless of the type or accessibility of such member), then the "tuple-like" binding protocol is used.
Case 3: if E is a non-union class type but std::tuple_size<E> is not a complete type, then the names are bound to the accessible data members of E.
Ничего не сломается, потому что std::get определён в точности как имя соответствующего поля.

Кажется, нужно еще внимательно посмотреть, что при этом не поедут ссылочности результатов такой декомпозиции, скажем, в случае
auto&& [x, y] = f(); //возвращается агрегат
источник