もう 1 つの考えられるケース: タプルをアンパックして値を関数に渡す必要がある場合。
この場合、コピー省略についてよくわからない場合に役立ちます。
そのような例:
template<typename ... Args>
class store_args{
public:
std::tuple<Args...> args;
template<typename Functor, size_t ... Indices>
decltype(auto) apply_helper(Functor &&f, std::integer_sequence<size_t, Indices...>&&){
return std::move(f(std::forward<Args>(std::get<Indices>(args))...));
}
template<typename Functor>
auto apply(Functor &&f){
return apply_helper(std::move(f), std::make_index_sequence<sizeof...(Args)>{});
}
};
std::bind
ただし、何らかの形式またはstd::thread
置換を作成していない限り、かなりまれなケースです。