История изменений
Исправление m0rph, (текущая версия) :
Потому что в C++ (и/или в STL) нет некоторых часто необходимых вещей из коробки. Пара сильно сферических примеров в вакууме: получение некого идентефикатора типа в compile-time, какое-нибудь подобие концептов, сигналы. Тут тебе и variadic templates сразу оказываются нужны, и type erasure, и куча дополнительных хаков. Хорошо еще сейчас есть std::function, а до C++11 вообще простой абстрактный колбек метода класса (делегат) без обмазывания шаблонами сделать было невозможно. А вот идентефикатор типа получить вообще переносимым образом невозможно. Практически единственный вариант - парсить в compile-time выхлоп __PRETTY_FUNCTION__ (GCC/Clang-only) с последующим рассчетом хеша. При чем от всего этого извращения реально уже тошнит, но если потребуется сделать что-то хоть немного претендующее на универсальное решение - приходется вновь и вновь придумывать какого-то очередного уродца, героически сражаясь с ветряными мельницами. А в итоге все равно получится сомнительное решение. Конечно можно сказать что все мои примеры ущербны и высосаны из пальца, но я просто написал первое, что в пришло голову.
Исправление m0rph, :
Потому что в C++ (и/или в STL) нет некоторых часто необходимых вещей из коробки. Пара сильно сферических примеров в вакууме: получение некого идентефикатора типа в compile-time, какое-нибудь подобие концептов, сигналы. Тут тебе и variadic templates сразу оказываются нужны, и type erasure, и куча дополнительных хаков. Хорошо еще сейчас есть std::function, а до C++11 вообще простой абстрактный колбек метода класса (делегат) без обмазывания шаблонами сделать было невозможно. А вот идентефикатор типа получить вообще переносимым образом невозможно. Практически единственный вариант - парсить в compile-time выхлоп __PRETTY_FUNCTION__ (GCC/Clang-only) с последующим рассчетом хеша. При чем от всего этого извращения реально уже тошнит, но если потребуется сделать что-то хоть немного претендующее не универсальное решение - приходется вновь и вновь придумывать какого-то очередного уродца, героически сражаясь с ветряными мельницами. А в итоге все равно получится сомнительное решение. Конечно можно сказать что все мои примеры ущербны и высосаны из пальца, но я просто написал первое, что в пришло голову.
Исправление m0rph, :
Потому что в C++ (и/или в STL) нет некоторых часто необходимых вещей из коробки. Пара сильно сферических примеров в вакууме: получение некого идентефикатора типа в compile-time, какое-нибудь подобие концептов, сигналы. Тут тебе и variadic templates сразу оказываются нужны, и type erasure, и куча дополнительных хаков. Хорошо еще сейчас есть std::function, а до C++11 вообще простой абстрактный колбек метода класса (делегат) без обмазывания шаблонами сделать было невозможно. А вот идентефикатор типа получить вообще переносимым образом невозможно. Практически единственный вариант - парсить в compile-time выхлоп __PRETTY_FUNCTION__ (GCC/Clang-only) с последующим рассчетом хеша. При чем от всего этого извращения реально уже тошнит, но если потребуется сделать что-то хоть немного претендующее не универсальное решение - приходется вновь и вновь придумывать какого-то очередного уродца, героически сражаясь с ветряными мельницами. А в итоге все равно получится сомнительное решение. Конечно можно сказать что все мои примеры ущербны и высосаны из пальца, я просто написал о том, что в голову пришло.
Исходная версия m0rph, :
Потому что в C++ (и/или в STL) нет некоторых часто необходимых вещей из коробки. Пара сильно сферических примеров в вакууме: получение некого идентефикатора типа в compile-time, какое-нибудь подобие концептов, сигналы. Тут тебе и variadic templates сразу оказываются нужны, и type erasure, и куча дополнительных хаков. Хорошо еще сейчас есть std::function, а до C++11 вообще простой абстрактный колбек метода класса (делегат) без обмазывания шаблонами сделать было невозможно. А вот идентефикатор типа получить вообще переносимым образом невозможно. Практически единственный вариант - парсить в compile-time выхлоп __PRETTY_FUNCTION__ (GCC/Clang-only) с последующим рассчетом хеша. При чем от всего этого извращения реально уже тошнит, но если потребуется сделать что-то хоть немного претендующее не универсальное решение - приходется вновь и вновь придумывать какого-то очередного уродца.
Конечно можно сказать что все мои примеры ущербны и высосаны из пальца, я просто написал о том, что в голову пришло.