Skip to content

Commit adff48e

Browse files
authored
modernize to cpp20 (#358)
Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
1 parent aaf5806 commit adff48e

7 files changed

Lines changed: 29 additions & 35 deletions

File tree

rqt_gui_cpp/CMakeLists.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@ cmake_minimum_required(VERSION 3.20)
22
project(rqt_gui_cpp)
33

44
find_package(ament_cmake REQUIRED)
5+
find_package(ament_cmake_ros_core REQUIRED)
56

67
if(WIN32)
78
message(STATUS "rqt_gui_cpp is not yet supported on Windows. Package will not be built.")
89
ament_package()
910
return()
1011
endif()
1112

12-
# Default to C++17
13-
if(NOT CMAKE_CXX_STANDARD)
14-
set(CMAKE_CXX_STANDARD 17)
15-
set(CMAKE_CXX_STANDARD_REQUIRED ON)
16-
endif()
13+
# The C++ standard (C++20) is provided by the
14+
# ament_cmake_ros_core::ament_ros_defaults interface target linked below.
1715

1816
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1917
add_compile_options(-Wall -Wextra -Wpedantic -fPIC)
@@ -59,6 +57,7 @@ target_link_libraries(${PROJECT_NAME} PUBLIC
5957
)
6058

6159
target_link_libraries(${PROJECT_NAME} PRIVATE
60+
ament_cmake_ros_core::ament_ros_defaults
6261
pluginlib::pluginlib
6362
Qt${QT_VERSION_MAJOR}::Widgets
6463
)

rqt_gui_cpp/include/rqt_gui_cpp/plugin.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,13 @@ class Plugin
5252
: public qt_gui_cpp::Plugin
5353
{
5454
public:
55-
Plugin()
56-
: qt_gui_cpp::Plugin()
57-
{}
55+
Plugin() = default;
5856

5957
/**
6058
* Shutdown and clean up the plugin before unloading.
6159
* I.e. unregister subscribers and stop timers.
6260
*/
63-
virtual void shutdownPlugin()
61+
void shutdownPlugin() override
6462
{}
6563

6664
virtual void passInNode(std::shared_ptr<rclcpp::Node> node)

rqt_gui_cpp/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<author email="michael.jeronimo@openrobotics.org">Michael Jeronimo</author>
1515

1616
<buildtool_depend>ament_cmake</buildtool_depend>
17+
<buildtool_depend>ament_cmake_ros_core</buildtool_depend>
1718

1819
<depend>pluginlib</depend>
1920
<depend>rclcpp</depend>

rqt_gui_cpp/src/rqt_gui_cpp/nodelet_plugin_provider.cpp

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "nodelet_plugin_provider.hpp"
3434

3535
#include <unistd.h>
36+
#include <format>
3637
#include <memory>
3738
#include <stdexcept>
3839
#include <string>
@@ -46,17 +47,17 @@ NodeletPluginProvider::NodeletPluginProvider(
4647
const QString & base_class_type)
4748
: qt_gui_cpp::RosPluginlibPluginProvider<rqt_gui_cpp::Plugin>(export_tag, base_class_type)
4849
, loader_initialized_(false)
49-
, ros_spin_thread_(0)
50+
, ros_spin_thread_(nullptr)
5051
{}
5152

5253
NodeletPluginProvider::~NodeletPluginProvider()
5354
{
54-
if (ros_spin_thread_ != 0) {
55+
if (ros_spin_thread_ != nullptr) {
5556
ros_spin_thread_->abort = true;
5657
ros_spin_thread_->exec_.remove_node(node_);
5758
ros_spin_thread_->wait();
5859
ros_spin_thread_->deleteLater();
59-
ros_spin_thread_ = 0;
60+
ros_spin_thread_ = nullptr;
6061
}
6162
}
6263

@@ -76,16 +77,13 @@ void NodeletPluginProvider::init_loader()
7677
loader_initialized_ = true;
7778

7879
// spawn ros spin thread
79-
if (ros_spin_thread_ == 0) {
80+
if (ros_spin_thread_ == nullptr) {
8081
ros_spin_thread_ = new RosSpinThread(this);
8182
ros_spin_thread_->start();
8283
}
8384

84-
std::stringstream name;
85-
name << "rqt_gui_cpp_node_";
86-
name << getpid();
8785
// Initialize a node for execution to be shared by cpp plugins
88-
node_ = rclcpp::Node::make_shared(name.str().c_str());
86+
node_ = rclcpp::Node::make_shared(std::format("rqt_gui_cpp_node_{}", getpid()));
8987
// Add our node to the executor for execution
9088
if (ros_spin_thread_) {
9189
ros_spin_thread_->exec_.add_node(node_);
@@ -101,8 +99,7 @@ std::shared_ptr<Plugin> NodeletPluginProvider::create_plugin(
10199
{
102100
init_loader();
103101

104-
std::string nodelet_name = lookup_name + "_" +
105-
QString::number(plugin_context->serialNumber()).toStdString();
102+
std::string nodelet_name = std::format("{}_{}", lookup_name, plugin_context->serialNumber());
106103
instance_.reset();
107104

108105
instance_ =
@@ -137,8 +134,7 @@ NodeletPluginProvider::RosSpinThread::RosSpinThread(QObject * parent)
137134
, abort(false)
138135
{}
139136

140-
NodeletPluginProvider::RosSpinThread::~RosSpinThread()
141-
{}
137+
NodeletPluginProvider::RosSpinThread::~RosSpinThread() = default;
142138

143139
void NodeletPluginProvider::RosSpinThread::run()
144140
{

rqt_gui_cpp/src/rqt_gui_cpp/nodelet_plugin_provider.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,20 +53,20 @@ class NodeletPluginProvider
5353
public:
5454
NodeletPluginProvider(const QString & export_tag, const QString & base_class_type);
5555

56-
virtual ~NodeletPluginProvider();
56+
~NodeletPluginProvider() override;
5757

58-
virtual void unload(void * instance);
58+
void unload(void * instance) override;
5959

6060
protected:
6161
void init_loader();
6262

63-
virtual std::shared_ptr<Plugin> create_plugin(
63+
std::shared_ptr<Plugin> create_plugin(
6464
const std::string & lookup_name,
65-
qt_gui_cpp::PluginContext * plugin_context);
65+
qt_gui_cpp::PluginContext * plugin_context) override;
6666

67-
virtual void init_plugin(
67+
void init_plugin(
6868
const QString & plugin_id, qt_gui_cpp::PluginContext * plugin_context,
69-
qt_gui_cpp::Plugin * plugin);
69+
qt_gui_cpp::Plugin * plugin) override;
7070

7171
std::shared_ptr<rqt_gui_cpp::Plugin> instance_;
7272

@@ -82,9 +82,9 @@ class NodeletPluginProvider
8282
: public QThread
8383
{
8484
public:
85-
explicit RosSpinThread(QObject * parent = 0);
86-
virtual ~RosSpinThread();
87-
void run();
85+
explicit RosSpinThread(QObject * parent = nullptr);
86+
~RosSpinThread() override;
87+
void run() override;
8888
bool abort;
8989
// Create an executor that will be responsible for execution of callbacks for a set of nodes.
9090
// With this version, all callbacks will be called from within this thread (the main one).

rqt_gui_cpp/src/rqt_gui_cpp/roscpp_plugin_provider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void RosCppPluginProvider::init_rclcpp()
8686
// initialize ROS node once
8787
if (!rclcpp_initialized_) {
8888
int argc = 0;
89-
char ** argv = 0;
89+
char ** argv = nullptr;
9090

9191
// Initialize any global resources needed by the middleware and the client library.
9292
// This will also parse command line arguments one day (as of Beta 1 they are not used).

rqt_gui_cpp/src/rqt_gui_cpp/roscpp_plugin_provider.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ class RosCppPluginProvider
4646
public:
4747
RosCppPluginProvider();
4848

49-
virtual ~RosCppPluginProvider();
49+
~RosCppPluginProvider() override;
5050

51-
virtual void * load(const QString & plugin_id, qt_gui_cpp::PluginContext * plugin_context);
51+
void * load(const QString & plugin_id, qt_gui_cpp::PluginContext * plugin_context) override;
5252

53-
virtual qt_gui_cpp::Plugin * load_plugin(
53+
qt_gui_cpp::Plugin * load_plugin(
5454
const QString & plugin_id,
55-
qt_gui_cpp::PluginContext * plugin_context);
55+
qt_gui_cpp::PluginContext * plugin_context) override;
5656

5757
protected:
5858
void init_rclcpp();

0 commit comments

Comments
 (0)