[英]C++ : how to use templates to overload return type?
说我有以下功能:
template<typename T>
shared_ptr<T> my_func(...){
....
....
return make_shared<T>(...);
}
而这个功能:
template<typename T>
T my_func(...){
....
....
return T(...);
}
理想情况下,我想做的事情是:
vector<shared_ptr<T>> ptr_vec = { my_func<T>(...), my_func<T>(...), ... };
vector<T> non_ptr_vec = {my_func<T>(...),...};
不必仅“查看”一个函数名my_func
。
现在,我正在写出解决方法:
template<typename T>
shared_ptr<T> my_func_shared_ptr(...){...}
template<typename T>
T my_func(...){...}
但这增加了复杂性。
如何使用模板来完成此功能?
因此,感谢注释中的输入,找到了另一个解决方法。
如果在模板中引入“虚拟”类,则足以重载返回类型。
template<typename T, typename U>
shared_ptr<T> my_func(...){...}
template<typename T>
T my_func(...){...}
然后,
struct ptr{};
A a = my_func<A>(...);
shared_ptr<A> a_ptr = my_func<A,ptr>(...);
这成为该功能的标签...已编译并正常工作。 我也可以在输入中而不是模板中使用它:
struct return_ptr{};
struct return_obj{};
template<typename T>
shared_ptr<T> my_func(...,return_ptr return_type){...};
template<typename T>
T my_func(...,return_obj return_type){...};
因此,在调用时:
vector<shared_ptr<A>> a_ptrs = {my_func<A>(...,return_ptr()),...};
vector<A> a_objs = {my_func<A>(...,return_obj()),...};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.