Libtorch uses CRTP to make cloneable modules. For example, torch::nn::Softmax
is a ModuleHolder<SoftmaxImpl>
and SoftmaxImpl
is a torch::nn::Cloneable<SoftmaxImpl>
.
Say I want a std::vector<Module>
or a function that returns a activation function that’s also a Module
. I have to cast various modules such as torch::nn::Softmax
to torch::nn:Module
. This means I loose Cloneable
which I’m not sure is a problem. If I return a reference by simply dereferencing ModuleHolder
, since it’s a shared pointer, I’m not sure if the underlying module is guaranteed to survive.
Any advice on how to get around Cloneable
and ModuleHolder
to work with generic torch::nn::Module
(so I can have a function that returns it or a std::vector
of it) is much appreciated!