【发布时间】:2016-06-11 18:29:35
【问题描述】:
我正在学习书中的模板: C++ 模板,完整指南(Vandevoorde,Josuttis)。 在第 15.1.3 章。是下面的例子:
// traits/accum5.hpp
#ifndef ACCUM_HPP
#define ACCUM_HPP
#include "accumtraits4.hpp"
template <typename T,
typename AT = AccumulationTraits<T> >
class Accum {
public:
static typename AT::AccT accum (T const* beg, T const* end) {
typename AT::AccT total = AT::zero();
while (beg != end) {
total += *beg;
++beg;
}
return total;
}
};
#endif // ACCUM_HPP
通常情况下,我们可以引入便利功能来简化界面:
template <typename T>
inline
typename AccumulationTraits<T>::AccT accum (T const* beg,
T const* end)
{
return Accum<T>::accum(beg, end);
}
template <typename Traits, typename T>
inline
typename Traits::AccT accum (T const* beg, T const* end)
{
return Accum<T, Traits>::accum(beg, end);
}
这是我迷路的地方。 谁能解释第二个接口函数是如何工作的,为什么使用它是个好主意,它什么时候有用以及如何调用它?
谢谢!
【问题讨论】:
-
好的。但是你的书怎么说?
-
他们只是说:通常情况下,我们可以引入便利功能来简化界面
标签: c++ templates metaprogramming template-meta-programming traits