From 70979f10b674b2c1dc9fcd9e9f0169b7f5fa25e2 Mon Sep 17 00:00:00 2001 From: aiqubits Date: Mon, 31 Aug 2026 22:15:47 +0800 Subject: [PATCH] Fix getting vector parameters Signed-off-by: aiqubits --- rclcpp/include/rclcpp/parameter_value.hpp | 5 +++-- rclcpp/test/rclcpp/test_node.cpp | 13 +++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/rclcpp/include/rclcpp/parameter_value.hpp b/rclcpp/include/rclcpp/parameter_value.hpp index 980e562984..b7c72fb702 100644 --- a/rclcpp/include/rclcpp/parameter_value.hpp +++ b/rclcpp/include/rclcpp/parameter_value.hpp @@ -305,10 +305,11 @@ class ParameterValue constexpr typename std::enable_if< std::is_convertible< - type, const std::vector &>::value, const std::vector &>::type + type, const std::vector &>::value, std::vector>::type get() const { - return get(); + const auto & value = get(); + return std::vector(value.begin(), value.end()); } template diff --git a/rclcpp/test/rclcpp/test_node.cpp b/rclcpp/test/rclcpp/test_node.cpp index cf9f6c6b02..3bf80e2af1 100644 --- a/rclcpp/test/rclcpp/test_node.cpp +++ b/rclcpp/test/rclcpp/test_node.cpp @@ -2726,6 +2726,19 @@ TEST_F(TestNode, get_parameter_undeclared_parameters_not_allowed) { } } +TEST_F(TestNode, get_parameter_with_vector_int) { + auto node = std::make_shared("test_get_parameter_node"_unq); + auto name = "parameter"_unq; + const std::vector expected_value = { + 42, -99, std::numeric_limits::max(), std::numeric_limits::lowest(), 0}; + + node->declare_parameter(name, expected_value); + + std::vector value; + EXPECT_TRUE(node->get_parameter(name, value)); + EXPECT_EQ(expected_value, value); +} + // test get_parameter with undeclared allowed TEST_F(TestNode, get_parameter_undeclared_parameters_allowed) { auto node = std::make_shared(