Динамически назначайте тип переменной в C ++ - PullRequest
0 голосов
/ 05 июня 2018

Я хотел бы создать алгоритм, который может использовать priority_queue или обычную очередь в зависимости от случая.Таким образом, одна и та же переменная должна быть назначена очереди или приоритетной очереди, но остальная часть кода будет такой же.В Java это возможно из-за наследования

Queue<Customer> customerPriorityQueue = new PriorityQueue<>(capacity, idComparator);

Доступно ли что-то подобное в C ++?

1 Ответ

0 голосов
/ 05 июня 2018

Да, вам нужно настроить свой класс на тип контейнера, который вы собираетесь использовать, например:

template < typename Queue >
class Test
{
    Queue queue;
public:
    void push( int i )
    {
        queue.push( i );
    }
};

Если вы хотите базовый класс полностью полиморфного контейнера в стиле Java:

template < typename T >
class Queue
{
public:
   virtual void push( const T& t ) = 0;    
};

template < typename Q >
class QueueImpl : public Queue< typename Q::value_type >
{
public:
   typedef typename Q::value_type value_type;

   virtual void push( const value_type& t ) override
   {
       q.push( t );
   }

private:
   Q q;
};

std::unique_ptr< Queue< int > > queue = std::make_unique< QueueImpl< std::queue< int > > >();
queue->push( 1 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...