![](/img/trans.png)
[英]How can I read/write an image in C++ using just boost/standard library?
[英]How can I write a template function that takes a generic C++ standard library container
例如,我有一個功能需要能夠適用於不同的容器類型
void foo(const std::vector<bar>& param1, const std::vector<double>& params2)
和
void foo(const std::list<bar>& param1, const std::list<double>& params2)
bar
是我寫的一個class
。 函數體本身使用通用的C ++標准庫函數。
有沒有辦法可以扼殺這個? 我努力了
template<typename T> void foo(const T<bar>&, const T<double>&)
但這會給編譯器帶來錯誤
錯誤C2988:無法識別的模板聲明/定義
我正在使用MSVC2015。
基本上有三種解決方案:
使用模板模板參數 。
使用迭代器(這是標准庫本身使用的)
對不同的參數使用不同的模板,讓編譯器推導出實際的類型。 有了你的功能,它就像是
template<typename T, typename U> void foo(const T&, const U&);
如果您只需要迭代容器的內容,建議使用解決方案2。 如果您需要訪問容器本身,建議使用解決方案3。
所謂的模板模板參數將允許您編寫所需的代碼(如其他答案或CppReference中所示 )。
或者,您也可以編寫接受迭代器的泛型函數。 這正是<algorithm>
中的函數的實現方式。 我傾向於認為接受迭代器的函數實際上更靈活,因為調用者可以決定函數需要處理的范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.