簡體   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