作为一个懒惰的开发者,我喜欢用这种伎俩来指定一个默认功能:刚刚返回传递值的默认函数?
template <class Type, unsigned int Size, class Function = std::less<Type> >
void arrange(std::array<Type, Size> &x, Function&& f = Function())
{
std::sort(std::begin(x), std::end(x), f);
}
但我有一个非常特殊的情况下的一个问题,这是这样的:
template <class Type, unsigned int Size, class Function = /*SOMETHING 1*/>
void index(std::array<Type, Size> &x, Function&& f = /*SOMETHING 2*/)
{
for (unsigned int i = 0; i < Size; ++i) {
x[i] = f(i);
}
}
在在这种情况下,我希望默认功能等同于:[](const unsigned int i){return i;}
(仅返回传递值的函数)。
为了做到这一点,我必须写什么来代替/*SOMETHING 1*/
和/*SOMETHING 2*/
?
+1,而是将'Function()'作为默认参数,而不是'identity()'。 – 2013-03-04 17:13:48
@ChristianRau:好点。 – Mankarse 2013-03-05 01:03:38
为什么你在这里使用一个结构?为什么不把“身份”定义为一个函数呢? – Claudiu 2014-11-14 21:33:45