Program Listing for File named_any.h¶
↰ Return to documentation for file (torch/csrc/api/include/torch/nn/modules/container/named_any.h
)
#pragma once
#include <torch/nn/modules/container/any.h>
#include <torch/types.h>
#include <memory>
#include <type_traits>
#include <utility>
namespace torch::nn {
class NamedAnyModule {
public:
template <typename ModuleType>
NamedAnyModule(std::string name, std::shared_ptr<ModuleType> module_ptr)
: NamedAnyModule(std::move(name), AnyModule(std::move(module_ptr))) {}
// NOTE: We need to use `std::remove_reference_t<M>` to get rid of
// any reference components for make_unique.
template <typename M, typename = torch::detail::enable_if_module_t<M>>
NamedAnyModule(std::string name, M&& module)
: NamedAnyModule(
std::move(name),
std::make_shared<std::remove_reference_t<M>>(
std::forward<M>(module))) {}
template <typename M>
NamedAnyModule(std::string name, const ModuleHolder<M>& module_holder)
: NamedAnyModule(std::move(name), module_holder.ptr()) {}
NamedAnyModule(std::string name, AnyModule any_module)
: name_(std::move(name)), module_(std::move(any_module)) {}
const std::string& name() const noexcept {
return name_;
}
AnyModule& module() noexcept {
return module_;
}
const AnyModule& module() const noexcept {
return module_;
}
private:
std::string name_;
AnyModule module_;
};
} // namespace torch::nn