我有以下函子,它包装了另一个函子或 lambda 函数并自动设置索引参数。一个例子将最好地解释。我可以执行以下操作:
auto f = stx::with_index([](int a, int index){ std::cout << a << " " << index << std::endl; });
f(5);
f(3);
f(9);
输出:
5 0
3 1
9 2
这是函子代码:
template<class FUNC>
class IndexFunctor
{
public:
typedef FUNC FUNC_T;
explicit IndexFunctor(const FUNC_T& func) : func(func), index(0) {}
template<class... ARGS>
void operator ()(ARGS&&... args)
{
func(args..., index++);
}
const FUNC_T& GetFunctor() const
{
return func;
}
int GetIndex() const
{
return index;
}
void SetIndex(int index)
{
this->index = index;
}
private:
FUNC_T func;
int index;
};
template<class FUNC>
IndexFunctor<FUNC> with_index(const FUNC& func)
{
return IndexFunctor<FUNC>(func);
}
现在的问题是我想将它与可能返回值的函数一起使用。例如
auto f = stx::with_index([](int a, int index){ return a * index; });
int a = f(5);
但我不知道如何修改我的函子以使其工作。我希望函子与返回值的函数和不自动返回值的函数都兼容。
任何人都可以提供一些建议吗?谢谢!
我正在使用 VS2012 Microsoft Visual C++ 编译器 2012 年 11 月 CTP