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