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