Program Listing for File functional.h¶
↰ Return to documentation for file (torch/csrc/api/include/torch/nn/modules/container/functional.h
)
#pragma once
#include <torch/csrc/Export.h>
#include <torch/csrc/utils/variadic.h>
#include <torch/nn/cloneable.h>
#include <torch/nn/pimpl.h>
#include <torch/types.h>
#include <functional>
#include <utility>
namespace torch {
namespace nn {
class TORCH_API FunctionalImpl : public torch::nn::Cloneable<FunctionalImpl> {
public:
using Function = std::function<Tensor(Tensor)>;
explicit FunctionalImpl(Function function);
template <
typename SomeFunction,
typename... Args,
typename = torch::enable_if_t<(sizeof...(Args) > 0)>>
explicit FunctionalImpl(SomeFunction original_function, Args&&... args)
// NOLINTNEXTLINE(modernize-avoid-bind)
: function_(std::bind(
original_function,
/*input=*/std::placeholders::_1,
std::forward<Args>(args)...)) {
// std::bind is normally evil, but (1) gcc is broken w.r.t. handling
// parameter pack expansion in lambdas and (2) moving parameter packs into
// a lambda only works with C++14, so std::bind is the more move-aware
// solution here.
}
void reset() override;
void pretty_print(std::ostream& stream) const override;
Tensor forward(Tensor input);
Tensor operator()(Tensor input);
bool is_serializable() const override;
private:
Function function_;
};
TORCH_MODULE(Functional);
} // namespace nn
} // namespace torch