diff --git a/demo_nodes_cpp/src/parameters/even_parameters_node.cpp b/demo_nodes_cpp/src/parameters/even_parameters_node.cpp index 24dc3e0c1..054561779 100644 --- a/demo_nodes_cpp/src/parameters/even_parameters_node.cpp +++ b/demo_nodes_cpp/src/parameters/even_parameters_node.cpp @@ -26,27 +26,18 @@ class EvenParameterNode : public rclcpp::Node { public: DEMO_NODES_CPP_PUBLIC - explicit EvenParameterNode(const rclcpp::NodeOptions options) - : Node("even_parameters_node", options) + explicit EvenParameterNode(rclcpp::NodeOptions options) + : Node("even_parameters_node", options.allow_undeclared_parameters(true)) { // Force flush of the stdout buffer. setvbuf(stdout, NULL, _IONBF, BUFSIZ); // Declare a parameter change request callback // This function will enforce that only setting even integer parameters is allowed // any other change will be discarded - auto existing_callback = this->set_on_parameters_set_callback(nullptr); auto param_change_callback = - [this, existing_callback](std::vector parameters) + [this](std::vector parameters) { auto result = rcl_interfaces::msg::SetParametersResult(); - // first call the existing callback, if there was one - if (nullptr != existing_callback) { - result = existing_callback(parameters); - // if the existing callback failed, go ahead and return the result - if (!result.successful) { - return result; - } - } result.successful = true; for (auto parameter : parameters) { rclcpp::ParameterType parameter_type = parameter.get_type(); @@ -84,8 +75,11 @@ class EvenParameterNode : public rclcpp::Node } return result; }; - this->set_on_parameters_set_callback(param_change_callback); + // callback_handler needs to be alive to keep the callback functional + callback_handler = this->add_on_set_parameters_callback(param_change_callback); } + + OnSetParametersCallbackHandle::SharedPtr callback_handler; }; } // namespace demo_nodes_cpp diff --git a/demo_nodes_cpp/src/parameters/parameter_blackboard.cpp b/demo_nodes_cpp/src/parameters/parameter_blackboard.cpp index 8e4dc94ac..089bbc9b4 100644 --- a/demo_nodes_cpp/src/parameters/parameter_blackboard.cpp +++ b/demo_nodes_cpp/src/parameters/parameter_blackboard.cpp @@ -29,12 +29,12 @@ class ParameterBlackboard : public rclcpp::Node public: DEMO_NODES_CPP_PUBLIC explicit ParameterBlackboard( - const rclcpp::NodeOptions & options = ( - rclcpp::NodeOptions() - .allow_undeclared_parameters(true) - .automatically_declare_parameters_from_overrides(true) - )) - : Node("parameter_blackboard", options) + rclcpp::NodeOptions options + ) + : Node( + "parameter_blackboard", + options.allow_undeclared_parameters(true). + automatically_declare_parameters_from_overrides(true)) { RCLCPP_INFO(this->get_logger(), "Parameter blackboard node named '%s' ready, and serving '%zu' parameters already!",