当我有一个带有某些类型参数的模板时,是否允许函数返回同一模板的对象,但是具有不同的类型?换句话说,是否允许以下内容?
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;
};
如果不允许这样做,我怎么能完成同样的事情?
答案 0 :(得分:2)
允许。对代码示例的一些更正:
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 :(得分:1)
事实上,您可以随意返回任何内容。您甚至可以返回取决于模板参数的内容:
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&) { /** **/ };
答案 2 :(得分:0)
当然可能。对我来说,上面的代码似乎有效