このテンプレート化された operator() は、reference_wrapper 実装でどのように機能しますか?
template <class T>
class reference_wrapper {
public:
// types
typedef T type;
// construct/copy/destroy
reference_wrapper(T& ref) noexcept : _ptr(std::addressof(ref)) {}
reference_wrapper(T&&) = delete;
reference_wrapper(const reference_wrapper&) noexcept = default;
// assignment
reference_wrapper& operator=(const reference_wrapper& x) noexcept = default;
// access
operator T& () const noexcept { return *_ptr; }
T& get() const noexcept { return *_ptr; }
ここに行きます:
template< class... ArgTypes >
typename std::result_of<T&(ArgTypes&&...)>::type
operator() ( ArgTypes&&... args ) const {
return std::invoke(get(), std::forward<ArgTypes>(args)...);
}
それにしても、なぜ operator() が必要なのでしょうか? 使い方?
返される内容「result_of::type」は何ですか?
(ArgTypes && ..) とは??
呼び出す(取得する)???
このコードは別の惑星の C++ のように見えます :)
private:
T* _ptr;
};