Size: a a a

2020 December 08

AF

Aidar Fattakhov in pro.cxx
Типа предположим что хотим писать в лог при добавлении значения в мапу и не хотим писать иф
источник

АР

Андрей Руссков... in pro.cxx
Aidar Fattakhov
Так речь про то чтобы не вызывалось
ну тут как - конструктор значения не будет вызван если value есть
источник

АР

Андрей Руссков... in pro.cxx
но аргументы конечно всё равно придется вычислять
источник

АР

Андрей Руссков... in pro.cxx
интересно а реально ли в стандарт как-то запихать оптимизацию вычисления аргументов?
источник

OL

Oleg Linkin in pro.cxx
другими словами ты хочешь функцию, которая проверить сначала ключ, а если его нет, то сконструирует value и вставит?
источник

AF

Aidar Fattakhov in pro.cxx
Ну эта функция по идее конструктор но тип поменяется
источник

AN

Alexander N in pro.cxx
Я так понял он хочет конструировать объект при обращении, если он ещё не сконструирован
источник

АР

Андрей Руссков... in pro.cxx
Oleg Linkin
другими словами ты хочешь функцию, которая проверить сначала ключ, а если его нет, то сконструирует value и вставит?
да. В принципе try_emplace эту задачу и выполняет, с поправкой на необходимость вычисления аргументов
источник

АК

Александр Караев... in pro.cxx
Андрей Руссков
да. В принципе try_emplace эту задачу и выполняет, с поправкой на необходимость вычисления аргументов
https://jguegant.github.io/blogs/tech/performing-try-emplace.html
очень хорошее чтиво на эту тему, почему try_emplace не решает все проблемы
источник

АР

Андрей Руссков... in pro.cxx
Александр Караев
https://jguegant.github.io/blogs/tech/performing-try-emplace.html
очень хорошее чтиво на эту тему, почему try_emplace не решает все проблемы
ну он кажется описывает именно ту проблему о которой говорю я )
источник

ID

In Dev in pro.cxx
template<typename T>
struct Test { int a = 10; };

struct Intspec { int b = 11; };
struct Floatspec { int c = 12; };

template<> struct Test<int> : Intspec {};
template<> struct Test<float> : Floatspec {};

int main()
{
   auto a = Test<std::string>{};
   auto b = Test<int>{};
   auto c = Test<float>{};

   std::cout << a.a << b.b << c.c << std::endl;

   return 0;
}


Подскажите, вот такое расширение специализации наследованием вообще легально? Выглядит ну очень странно)
источник

D

Danya in pro.cxx
In Dev
template<typename T>
struct Test { int a = 10; };

struct Intspec { int b = 11; };
struct Floatspec { int c = 12; };

template<> struct Test<int> : Intspec {};
template<> struct Test<float> : Floatspec {};

int main()
{
   auto a = Test<std::string>{};
   auto b = Test<int>{};
   auto c = Test<float>{};

   std::cout << a.a << b.b << c.c << std::endl;

   return 0;
}


Подскажите, вот такое расширение специализации наследованием вообще легально? Выглядит ну очень странно)
Да
источник

AF

Aidar Fattakhov in pro.cxx
In Dev
template<typename T>
struct Test { int a = 10; };

struct Intspec { int b = 11; };
struct Floatspec { int c = 12; };

template<> struct Test<int> : Intspec {};
template<> struct Test<float> : Floatspec {};

int main()
{
   auto a = Test<std::string>{};
   auto b = Test<int>{};
   auto c = Test<float>{};

   std::cout << a.a << b.b << c.c << std::endl;

   return 0;
}


Подскажите, вот такое расширение специализации наследованием вообще легально? Выглядит ну очень странно)
норм выглядит
источник

AF

Aidar Fattakhov in pro.cxx
можешь еще погуглить policy based design от александреску
источник

ID

In Dev in pro.cxx
Aidar Fattakhov
норм выглядит
Я тоже так решил, но взглянул на код через две недели и аж сам удивился, что написал
источник

D

Danya in pro.cxx
In Dev
template<typename T>
struct Test { int a = 10; };

struct Intspec { int b = 11; };
struct Floatspec { int c = 12; };

template<> struct Test<int> : Intspec {};
template<> struct Test<float> : Floatspec {};

int main()
{
   auto a = Test<std::string>{};
   auto b = Test<int>{};
   auto c = Test<float>{};

   std::cout << a.a << b.b << c.c << std::endl;

   return 0;
}


Подскажите, вот такое расширение специализации наследованием вообще легально? Выглядит ну очень странно)
полная специализация — это конкретный класс, который по сути не связан с шаблоном и другими специализациями / инстанциациями
источник

AS

Alex Sandrov in pro.cxx
Aidar Fattakhov
можешь еще погуглить policy based design от александреску
Про это у Майерса тоже прикольно описано в "современный и эффективный с++"
источник

S

Stas in pro.cxx
Alex Sandrov
Про это у Майерса тоже прикольно описано в "современный и эффективный с++"
Что-то не припоминаю там такого.
источник

AF

Aidar Fattakhov in pro.cxx
Stas
Что-то не припоминаю там такого.
Там crtp вроде
источник

m

magras in pro.cxx
Андрей Руссков
есть кстати классный вид кейса. А-ля "если в хешмапе есть элемент, то используем, иначе вставляем вот такой"
Еще есть insert_or_assign для кейсов, когда конструирование value дешевое.
источник