簡體   English   中英

模板規范得到“對重載函數的不明確調用”

[英]Template specification get 'Ambiguous call to overloaded function'

我工作的一個模板函數時可能會返回一個Collection或第一個元素Collection ,其中存儲一些本地指針。


template<typename T>
class Collection
{
public:
    std::vector<T*> m_Container;
};

template<typename T>
T* GetGlobal()
{
    return &(*g_GlobalStrings.begin());
}

template<typename T>
Collection<T>* GetGlobal()
{
    auto res = std::vector<T*>(g_GlobalStrings.size());
    for (auto&& item : g_GlobalStrings)
    {
        res.push_back(&item);
    }
    return Collection<T>{res};
}

但是編譯器(MSVC)說:

error C2668: 'GetGlobal': ambiguous call to overloaded function.

我不確定如何實現這一點。 任何幫助將不勝感激。

返回類型對函數簽名沒有影響,因此 調用是模棱兩可的。

你應該使用 std::enable_if<> 之類的東西。

防止歧義的唯一方法是不要為同一類型啟用這兩個功能。 另一種更簡單的方法是更改​​函數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM