0
爲了與庫中的其他類保持一致,我的數組類下面有兩個read()方法。第一個將整個數組讀取到輸出迭代器並返回錯誤代碼,第二個讀取單個值並返回(使用異常錯誤)。重載名稱的模板化方法
我遇到的問題是,如果我用int調用第二個read(size_t idx)方法,編譯器更喜歡模板化方法。我需要明確指定一個unsigned int來使其工作。我的問題是,是什麼我解決此問題的選項:
- 重命名或者讀取功能,以避免過載
- 使用類似的boost :: enable_if防止迭代器版本,從非迭代工作。這雖然... sullies界面...
- 我失蹤的任何其他想法?
-------------------------------------------- -----------------
#include <iostream>
#include <iterator>
#include <vector>
struct FooArray
{
template <typename TIter>
int read(TIter out)
{
*out++ = 123.456; // copy stuff to output iterator
return 99; // error code
}
double read(size_t index)
{
return 1.234; // return value at index
}
};
int main(int argc, char**argv)
{
FooArray tmp;
std::cout << tmp.read(10u) << std::endl;
/* std::cout << tmp.read(10) << std::endl; COMPILER ERROR */
tmp.read(std::ostream_iterator<double>(std::cout,"\n"));
}
+1,正是我想要的實際閱讀你的答案的xD – 2010-09-30 05:24:17
感謝證實了我認爲之前寫的。我會給enable_if方法一個去看看我的模板恐懼同事抱怨! – 2010-09-30 07:38:52