看看這段代碼。將std :: vector重命名爲另一個類以用於重載?
#include <vector>
template<class ...Args>
using other_vector = std::vector<Args...>;
template<class T>
void f(std::vector<T>&) {}
template<class T>
void f(other_vector<T>&) {}
int main()
{
other_vector<int> b;
f(b);
return 0;
}
它不會編譯,因爲f
被重新聲明。我完全理解錯誤。但是,我需要第二個類,其行爲類似於std::vector<T>
,但會被視爲不同的類型,所以像上面的示例一樣,重載將是合法的。
我該怎麼辦?
- 讓新班級有
std::vector<T>
作爲基類。這可能工作,但不應該從std容器繼承。 - 讓新類具有std :: vector類型的成員,然後重新聲明所有函數以重定向到成員函數。聽起來很多工作。
有什麼更好的選擇? C++ 11或C++ 14允許。
看看'BOOST_STRONG_TYPEDEF'。如果它不能與模板一起工作,那麼你可以借鑑靈感來做出一些事情。 – chris
你確定你需要兩個幾乎相同類型的函數嗎? – StoryTeller
嘗試繼承。 –