【发布时间】:2021-08-21 21:00:45
【问题描述】:
template <typename ForwIt>
typename std::iterator_traits<ForwIt>::value_type
foo(ForwIt begin, ForwIt end, double bar)
{
using value_type = typename std::iterator_traits<ForwIt>::value_type;
// value_type is the type of the values the iterator ForIt points to
value_type baz;
// Do stuff with the values in range [begin, end).
// And modify baz;
return baz;
}
int main()
{
std::vector<int> numbers;
for (int i = 0; i < 10; ++i)
numbers.push_back(i);
const std::vector<int> v0(numbers.begin(), numbers.end());
const std::vector<float> v1(numbers.begin(), numbers.end());
std::cout << foo(v0.begin(), v0.end(), 0.1) << ' ' <<
foo(v1.begin(), v1.end(), 0.1) << std::endl;
return 0;
}
foo 函数的返回类型的推导是value_type 被推导出来的。现在这适用于所有数字类型。
但是当value_type 是推导整数类型时,我希望返回类型(和baz 的类型)为double。在这种情况下如何进行专业化?
【问题讨论】:
标签: c++ templates iterator specialization iterator-traits