繁体   English   中英

C ++:如何使用模板重载返回类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM