Разрешено ли в шаблоне C ++ возвращать объект с параметрами определенного типа? - PullRequest
3 голосов
/ 23 марта 2010

Когда у меня есть шаблон с определенными параметрами типа, разрешено ли функции возвращать объект этого же шаблона, но с разными типами? Другими словами, разрешено ли следующее?

template<class edgeDecor, class vertexDecor, bool dir>
Graph<edgeDecor,int,dir> Graph<edgeDecor,vertexDecor,dir>::Dijkstra(vertex s, bool 
print = false) const
{
    /* Construct new Graph with apropriate decorators */
    Graph<edgeDecor,int,dir> span = new Graph<edgeDecor,int,dir>();    

    /* ... */

    return span;
};

Если это не разрешено, как я могу выполнить то же самое?

Ответы [ 3 ]

2 голосов
/ 23 марта 2010

Допускается. Некоторые исправления в вашем примере кода:

template<class edgeDecor, class vertexDecor, bool dir>
Graph<edgeDecor,int,dir> *Graph<edgeDecor,vertexDecor,dir>::Dijkstra(vertex s, bool 
print = false) const
{
    /* Construct new Graph with apropriate decorators */
    Graph<edgeDecor,int,dir> *span = new Graph<edgeDecor,int,dir>();    

    /* ... */

    return span;
};
1 голос
/ 23 марта 2010

На самом деле, вы можете вернуть все, что хотите.Вы даже можете вернуть что-то, что зависит от параметров шаблона:

namespace result_of
{
  template <class T>
  struct method { typedef T type; };

  template <class T>
  struct method<T&> { typedef T type; }

  template <class T>
  struct method<T*> { typedef T type; }

  template <class T, class A>
  struct method< std::vector<T,A> > { typedef T type; }
}

template <class T>
typename result_of::method<T>::type method(const T&) { /** **/ };
0 голосов
/ 23 марта 2010

Это, конечно, возможно.Для меня вышеуказанный код кажется действительным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...