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