универсальный shared_ptr как член класса - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу, чтобы shared_ptr являлся членом класса, но тип, которым управляет shared_ptr, каждый раз отличается и известен только во время выполнения. Есть ли способ объявить такого члена и инициировать его позже?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Да.

Используйте полиморфизм времени выполнения, который означает определение общего базового класса, скажем Base, и объявление общих интерфейсов как виртуальных функций в нем, а затем производных от него и реализацию виртуальных функций в производных классах. Если вы это сделаете, то вы можете использовать так:

std::share_ptr<Base> ptr;
//now ptr can store an instance of any derived class from Base

Или вы можете использовать boost::any, если невозможно определить общий базовый класс. Если вы не можете использовать Boost, вы можете определить класс any самостоятельно. Поиск типа Erasure на этом сайте и в Google.

Ниже приведена двухстраничная статья о типе Erasure, и вы можете найти реализацию boost::any на второй странице (хотя и не завершенную):

1 голос
/ 21 декабря 2011

Если типы не связаны, вы можете использовать что-то вроде Boost.Any для этого.В противном случае делайте то, что @ Наваз говорит .

...