Я работаю с gnuplot.
В файле заголовка у меня есть следующая функция:
void PlotPath(Gnuplot& gp, const char* title, bool first_plot = true, bool last_plot = true);
Затем в файле cpp:
template <typename T>
void Path<T>::PlotPath(Gnuplot& gp, const char* title, bool first_plot, bool last_plot)
{
std::vector<WaypointPath<T>> waypoints = GenerateWaypoints(5000);
std::vector<std::pair<T, T>> plot_points(5000);
for (size_t i = 0; i < waypoints.size(); ++i) {
plot_points[i] = std::make_pair(waypoints[i].position[0], waypoints[i].position[1]);
}
if (first_plot) {
gp << "plot" << gp.file1d(plot_points) << "with lines title '" << title << "',";
} else {
gp << gp.file1d(plot_points) << "with lines title '" << title << "',";
}
if (last_plot) {
gp << std::endl;
}
}
Вместо этого я хочу сделать использования const char * title, я хочу использовать std :: string title. Итак, я сделал следующее, и это работает, но мне было интересно, есть ли лучший способ решения этой задачи.
template <typename T>
void Path<T>::PlotPath(Gnuplot& gp, const char* title, bool first_plot, bool last_plot)
{
std::vector<WaypointPath<T>> waypoints = GenerateWaypoints(5000);
std::vector<std::pair<T, T>> plot_points(5000);
// Convert const char * to std::string
std::string string_title = title;
for (size_t i = 0; i < waypoints.size(); ++i) {
plot_points[i] = std::make_pair(waypoints[i].position[0], waypoints[i].position[1]);
}
if (first_plot) {
gp << "plot" << gp.file1d(plot_points) << "with lines title '" << string_title << "',";
} else {
gp << gp.file1d(plot_points) << "with lines title '" << string_title << "',";
}
if (last_plot) {
gp << std::endl;
}
}
Здесь я конвертирую const char * в std :: string, создавая другая переменная. Но есть ли способ включить std::string title
в сам аргумент функции?
То, что я сделал здесь, работает нормально, но я просто ищу более элегантный способ решения этой проблемы.
С нетерпением жду вас.