Третья часть, в которой я немного покажу, как восстанавливать информацию об объектах в windbg без приватных символов (только публичные), а также немного поясню почему make_shared лучше чем сырой вызов new, и как вообще это связано с отладкой.
Показаны сообщения с ярлыком shared_ptr. Показать все сообщения
Показаны сообщения с ярлыком shared_ptr. Показать все сообщения
воскресенье, 19 ноября 2017 г.
понедельник, 21 ноября 2011 г.
Что же такое type erasure?
В данном случае мне кажется, что проще привести пример, который обрисует проблему. Итак, предположим, нам необходим список, содержащий функции со следующей сигнатурой:
Окей, скажем мы:
Но, что если мы хотим хранить не только функции, но и объекты у которых есть оператор (), возвращающий int. В таком случае, мы могли бы сделать базовый класс:
Но в таком случае мы ограничены только теми объектами, которые являются наследниками класса nullary_function_base. Как быть с функторами, которые получаются, например, в результате использования std::bind1st и пр.? Ведь в этом случае мы уже не можем сделать его наследником nullary_function_base. Или если используется обобщенное программирование и тип функтора просто неизвестен (например, внутри шаблонного класса, функции)?
Вот как раз для решения такой проблемы и используется type erasure.
typedef int (* nullary_function_returning_int_t)();
|
_Winnie C++ Colorizer |
typedef std::list<nullary_function_returning_int_t> func_list_t;
|
_Winnie C++ Colorizer |
class nullary_function_base
{
public:
virtual ~nullary_function_base(){} virtual int operator() () = 0; }; typedef std::list<nullary_function_base * > func_list_ptr_t; |
_Winnie C++ Colorizer |
Вот как раз для решения такой проблемы и используется type erasure.
Ярлыки:
программирование,
рефакторинг,
boost,
boost::bind,
boost::function,
c++,
googlemock,
googletest,
shared_ptr,
TDD,
type_erasure
Подписаться на:
Сообщения (Atom)