#include <ariles2/adapters/eigen.h>
namespace
{
class ArilesBaseClass
{
#define ARILES2_ENTRIES(v) \
ARILES2_TYPED_ENTRY(v, real_member, double) \
ARILES2_TYPED_ENTRY_(v, integer_member, int)
#include ARILES2_INITIALIZE
public:
virtual ~ArilesBaseClass() = default;
{
real_member = 0.0;
integer_member_ = 12;
}
};
class NonArilesBaseClass
{
public:
Eigen::Vector3d eigen_vector_;
};
class MyClass : public ArilesBaseClass,
public NonArilesBaseClass
{
#define ARILES2_ENTRIES(v) \
ARILES2_PARENT(v, ArilesBaseClass) \
ARILES2_ENTRY_(v, eigen_vector)
#include ARILES2_INITIALIZE
public:
~MyClass() override = default;
{
arilesVisitParents(visitor, param);
ArilesBaseClass::arilesVisit(visitor, param);
real_member = 100.0;
eigen_vector_.setZero();
}
};
{
#define ARILES2_ENTRIES(v) \
ARILES2_TYPED_ENTRY_(v, my_class_vector, std::vector<MyClass>) \
ARILES2_TYPED_ENTRY_(v, ptr, std::shared_ptr<MyClass>)
#include ARILES2_INITIALIZE
public:
virtual ~MyContainerClass() = default;
};
}
#include <iostream>
int main(
int argc,
char *argv[])
{
try
{
rclcpp::init(argc, argv);
const rclcpp::Node::SharedPtr nh = rclcpp::Node::make_shared(
"demo_api_v2_ros2",
rclcpp::NodeOptions().allow_undeclared_parameters(true).automatically_declare_parameters_from_overrides(
true));
{
MyContainerClass my_container_class;
my_container_class.my_class_vector_.emplace_back();
ariles2::apply<ariles2::Defaults>(my_container_class.my_class_vector_[0]);
ariles2::apply<ariles2::yaml_cpp::Writer>(std::cout, my_container_class);
ariles2::apply<ariles2::ros2param::Reader>(nh->get_node_parameters_interface(), my_container_class);
ariles2::apply<ariles2::yaml_cpp::Writer>(std::cout, my_container_class);
}
{
MyContainerClass my_container_class;
my_container_class.ptr_ = std::make_shared<MyClass>();
ariles2::apply<ariles2::Defaults>(*my_container_class.ptr_);
my_container_class.my_class_vector_.emplace_back();
ariles2::apply<ariles2::Defaults>(my_container_class.my_class_vector_[0]);
my_container_class.my_class_vector_[0].real_member = 200;
ariles2::apply<ariles2::ros2param::Writer>(nh->get_node_parameters_interface(), my_container_class);
ariles2::apply<ariles2::ros2param::Reader>(nh->get_node_parameters_interface(), my_container_class);
ariles2::apply<ariles2::yaml_cpp::Writer>(std::cout, my_container_class);
}
{
MyContainerClass my_container_class;
my_container_class.my_class_vector_.emplace_back();
ariles2::apply<ariles2::Defaults>(my_container_class.my_class_vector_[0]);
ariles2::apply<ariles2::ros2param::Declarator>(nh->get_node_parameters_interface(), my_container_class);
}
{
MyClass my_class;
try
{
ariles2::apply<ariles2::ros2param::Reader>(nh->get_node_parameters_interface(), my_class);
}
catch (const std::exception &e)
{
std::cout << e.what() << std::endl;
}
}
}
catch (const std::exception &e)
{
std::cout << e.what() << std::endl;
return (EXIT_FAILURE);
}
return (EXIT_SUCCESS);
}