Size: a a a

2020 December 14

B

Bytearray in pro.cxx
Dmitry
Раньше юзал для парсинга и генерации JSON RapidJSON. Сейчас снова задача c JSON вылезла. Какую либу порекомендуете? В приоритете  наверное скорость.
SimdJson, или наоборот, не помню. Быстрее всех, и выглядит аккуратно.

Ещё есть стильный-модный nlohmann, но оно медленное
источник
2020 December 15

D

Dmitry in pro.cxx
Bytearray
SimdJson, или наоборот, не помню. Быстрее всех, и выглядит аккуратно.

Ещё есть стильный-модный nlohmann, но оно медленное
Спасибо, гляну.
источник

A

Abmilion in pro.cxx
Alexander N
Вопрос возник немного извращенный. Есть функция main(), адрес которой нельзя получить никак, но до main существует специальная функция, вызывающая как раз таки main - _start. Можно ли как-то извратиться и получить её адрес, учитывая то что как я понял она появляется только на этапе линковки? Если например сдампить асм в .s, то её нету
А для чего тебе это вообще необходимо?
источник

B

Bytearray in pro.cxx
Второй день тут обсуждение адресов функций, астрологи объявили неделю UB
источник

m

magras in pro.cxx
Alexander N
Вопрос возник немного извращенный. Есть функция main(), адрес которой нельзя получить никак, но до main существует специальная функция, вызывающая как раз таки main - _start. Можно ли как-то извратиться и получить её адрес, учитывая то что как я понял она появляется только на этапе линковки? Если например сдампить асм в .s, то её нету
Смотря когда нужно его получить.
Во время линковки я с этим не работал.
Но entry point можно получить распарсив ELF/PE.
источник

A

Alex in pro.cxx
magras
Поэтому лучше реализовать свой any, но назвать его по другому, чтобы никто не догадался?
указатели и наследование - концепции, которые понимают все программисты С++ (я надеюсь), а any - экзотическая штука из std, которую я в живом коде ещё не встречал
источник

B

Bytearray in pro.cxx
Alex
указатели и наследование - концепции, которые понимают все программисты С++ (я надеюсь), а any - экзотическая штука из std, которую я в живом коде ещё не встречал
Почему экзотическая, тот же void*, только по-человечески
источник

f

fulcanelly in pro.cxx
Alex
указатели и наследование - концепции, которые понимают все программисты С++ (я надеюсь), а any - экзотическая штука из std, которую я в живом коде ещё не встречал
как минимум в работе с json используют
источник

B

Bytearray in pro.cxx
fulcanelly
как минимум в работе с json используют
кстате да. и в xtensor как-то пытались завезти, не знаю, чем закончилось
источник

A

Alex in pro.cxx
Пытаюсь выкрутиться без std::function и без кастомного деаллокатора, получается вот такая иерархия:

struct FunctorBase {
 // Это тип указателя, владеющего инстансами: std::unique_ptr<FunctorBase>. Нужен только для корректной деаллокации объекта.

 virtual ~FunctorBase() = default;
};

template <typename... Args>
struct FunctorInvokable : FunctorBase {
 // Этот тип известен в месте использования объекта - делаем каст и вызываем operator()

 virtual void operator()(Args&&... args) const = 0;
};

template <class Invokable, typename... Args>
struct Functor final : FunctorInvokable<Args...> {
 // Этот тип известен только в месте конструирования объекта и больше нигде

 explicit Functor(Invokable&& invokable) : _invokable{ std::move(invokable) }
 {}

 void operator()(Args&&... args) const override {
   _invokable(std::forward<Args>(args)...);
 }

private:
 const Invokable _invokable;
};

И возникает проблема из-за глупого ограничения, что после template parameter pack нельзя указать фиксированный параметр. Из-за этого в классе Functor шаблонный параметр Invokable обязан быть первым, а это ломает автоматическое выведение типов, и я не могу написать:

Functor<Arguments...> f{ [](Arguments... args) {} };

Выкрутиться можно, объявив лямбду перед созданием функтора:
auto lambda = [](Arguments... args) {};
Functor<decltype(lambda), Arguments...> f{ std::move(lambda) };

Есть ли более простой/изящный способ?
источник

N

Neargye in pro.cxx
Alex
Пытаюсь выкрутиться без std::function и без кастомного деаллокатора, получается вот такая иерархия:

struct FunctorBase {
 // Это тип указателя, владеющего инстансами: std::unique_ptr<FunctorBase>. Нужен только для корректной деаллокации объекта.

 virtual ~FunctorBase() = default;
};

template <typename... Args>
struct FunctorInvokable : FunctorBase {
 // Этот тип известен в месте использования объекта - делаем каст и вызываем operator()

 virtual void operator()(Args&&... args) const = 0;
};

template <class Invokable, typename... Args>
struct Functor final : FunctorInvokable<Args...> {
 // Этот тип известен только в месте конструирования объекта и больше нигде

 explicit Functor(Invokable&& invokable) : _invokable{ std::move(invokable) }
 {}

 void operator()(Args&&... args) const override {
   _invokable(std::forward<Args>(args)...);
 }

private:
 const Invokable _invokable;
};

И возникает проблема из-за глупого ограничения, что после template parameter pack нельзя указать фиксированный параметр. Из-за этого в классе Functor шаблонный параметр Invokable обязан быть первым, а это ломает автоматическое выведение типов, и я не могу написать:

Functor<Arguments...> f{ [](Arguments... args) {} };

Выкрутиться можно, объявив лямбду перед созданием функтора:
auto lambda = [](Arguments... args) {};
Functor<decltype(lambda), Arguments...> f{ std::move(lambda) };

Есть ли более простой/изящный способ?
сделать make_* функцию?
источник

A

Alex in pro.cxx
Вариант, спасибо!
источник

A

Alex in pro.cxx
хотя нет, стоп, в make я тоже должен передать инстанс лямбды и пак аргументов - та же самая проблема
источник

A

Alex in pro.cxx
вот если бы можно было комбинировать template <typename ...> и auto аргументы в функциях - тогда получилось бы
источник

A

Alex in pro.cxx
тогда make_... должен быть шаблонным статическим методом шаблонного класса, так получится
источник

N

Neargye in pro.cxx
Alex
вот если бы можно было комбинировать template <typename ...> и auto аргументы в функциях - тогда получилось бы
да, точно, можно попробовать передавать туплю например
но не уверен точно что будет лучше
источник

РО

Ростислав Овдий... in pro.cxx
Ребята, привет. Не могу уже часа 3 разобраться с ошибкой. Может кто-то может помочь?
источник

A

Alex in pro.cxx
меня устраивает вариант с шаблоном-фабрикой, всё лучше, чем руками объявлять объект и мувать его
источник

K

Konstantin in pro.cxx
Ростислав Овдий
Ребята, привет. Не могу уже часа 3 разобраться с ошибкой. Может кто-то может помочь?
какой ответ ты ожидаешь услышать не задав вопрос?
источник

A

Alex in pro.cxx
Почему, вон же знак вопроса. Отвечу: кто-то наверняка может.
источник