別のファンクターまたはラムダ関数をラップし、インデックスパラメーターを自動的に設定する次のファンクターがあります。例は最もよく説明します。私は次のことができます:
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