よりもむしろINVOKE
を実装library features that uses itのいずれかを使用し、自分自身:ここ
は2例(cppreference.comから取られたコード)のための基本的な考え方です。特にstd::reference_wrapper
が機能します。したがって、あなたはstd::ref(f)(args...)
でstd::invoke(f, args...)
の効果を持つことができます。
template<typename F, typename... Args>
auto invoke(F f, Args&&... args)
-> decltype(std::ref(f)(std::forward<Args>(args)...))
{
return std::ref(f)(std::forward<Args>(args)...);
}
std::reference_wrapper
が渡されたオブジェクトが右辺値ではないことを必要とするため、私は前方f
しませんでした。 std::ref
の代わりにstd::bind
を使用しても問題は解決されません。 C++ 17でstd::invoke(F{})
がRvalue
を印刷し、一方、
struct F
{
void operator()() && {
std::cout << "Rvalue\n";
}
void operator()() const& {
std::cout << "Lvalue\n";
}
};
invoke(F{})
、Lvalue
を印刷します。これが意味することは、このような関数オブジェクトのためということです。
は私がthis paper
からの技術を使用して、ユースケースを持っていましたか? –