Это зависит от Ваших целей. Можно использовать версию 1, если Вы
, я обычно предпочитал бы версию 1 с помощью полиморфизма во время выполнения, потому что это все еще гибко и позволяет, у Вас, чтобы иметь Автомобиль все еще есть тот же тип: Car
другой тип, чем Car
. Если Вашими целями является высокая эффективность при использовании тормозов часто, я рекомендую Вам использовать шаблонный подход. Между прочим, это называют основанным на политике дизайном. Вы обеспечиваете политика тормоза . Пример, потому что Вы сказали Вас, запрограммировал в Java, возможно Вы слишком еще не испытаны с C++. Один способ сделать его:
template
class Car {
Accelerator accelerator;
Brakes brakes;
public:
void brake() {
brakes.brake();
}
}
, Если у Вас есть много политик, можно собрать в группу их в их собственную структуру и передачу что один, например, как SpeedConfiguration
сбор Accelerator
, Brakes
и еще немного. В моих проектах я пытаюсь сохранить много кода без шаблонов, позволяя им быть скомпилированным однажды в их собственные объектные файлы, не нуждаясь в их коде в заголовках, но все еще позволяя полиморфизм (через виртуальные функции). Например, Вы могли бы хотеть сохранить общие данные и функции, что нешаблон кода, вероятно, обратится ко многим случаям в базовом классе:
class VehicleBase {
protected:
std::string model;
std::string manufacturer;
// ...
public:
~VehicleBase() { }
virtual bool checkHealth() = 0;
};
template
class Car : public VehicleBase {
Accelerator accelerator;
Breaks breaks;
// ...
virtual bool checkHealth() { ... }
};
Кстати, который является также подходом, который используют потоки C++: std::ios_base
содержит флаги, и наполните, которые не зависят от символьного типа или черт как openmode, флаги формата и материал, в то время как std::basic_ios
тогда шаблон класса, который наследовал его. Это также уменьшает чрезмерное увеличение размера кода путем совместного использования кода, который характерен для всех инстанцирований шаблона класса.
Частного наследования нужно избежать в целом. Это только очень редко полезно, и включение является лучшей идеей в большинстве случаев. Общий падеж, где противоположное верно, когда размер действительно крайне важен (основанный на политике строковый класс, например): Пустая Оптимизация Базового класса может применяться при получении из пустого класса политики (просто содержащий функции).
Использование Read и злоупотребления Наследованием Herb Sutter.
Вы можете управлять gnuplot , используя Chart :: Gnuplot .
В качестве альтернативы, если SVG является приемлемым выходным форматом, существует SVG :: TT :: График .
Вы можете использовать Chart :: Clicker Axis :: DateTime:
#!/usr/local/bin/perl -w
use strict;
use Chart::Clicker;
use Chart::Clicker::Axis::DateTime;
use Chart::Clicker::Data::Series;
use Chart::Clicker::Data::DataSet;
use Chart::Clicker::Renderer::Point;
my $cc = Chart::Clicker->new;
my $series = Chart::Clicker::Data::Series->new(
values => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
keys => [
1256147117, 1256148117, 1256149117, 1256150117, 1256151117, 1256152117,
1256153117, 1256154117, 1256155117, 1256156117
],
);
my $ctx = $cc->get_context('default');
$ctx->domain_axis(Chart::Clicker::Axis::DateTime->new(position => 'bottom', orientation => 'horizontal'));
my $ds = Chart::Clicker::Data::DataSet->new(series => [ $series ]);
$cc->add_to_datasets($ds);
$cc->write_output('foo.png');
Вы должны преобразовать свое время в временные метки Unix, но это DWIM.
Вам нужно, чтобы график создавался в реальном времени или для разового отчета? В последнем случае вы можете использовать модули DateTime для генерации значений Excel и построения их графика в Excel (или его аналоге с открытым исходным кодом).
use DateTime::Format::MySQL;
use DateTime::Format::Excel;
my $dt = DateTime::Format::MySQL->parse_datetime( '2003-01-16 23:12:01' );
print $dt, "\n";
my $daynum = DateTime::Format::Excel->format_datetime($dt);
print $daynum, "\n";
Некоторое время назад я сделал что-то подобное, используя Asymptote . Это замечательный пакет, но им нелегко пользоваться.
Я попробовал DBIx :: Chart, но не смог заставить его распознавать мои даты.
Вы пытались перевести свои даты в Unix-Timestamp и использовать их как даты X?
Самый простой способ сделать это с помощью Perl - это использовать Perl для запуска процесса gnuplot. Вы можете использовать set timefmt x "% Y-% m-% d"
, и он автоматически проанализирует данные в имеющемся у вас формате. Gnuplot также поддерживает множество форматов вывода.
Я бы порекомендовал нормализовать даты к целым числам. Метод грубой силы, конечно, будет использовать секунды эпохи, но это может выглядеть не слишком хорошо на графике, поэтому нормализуйте линейным преобразованием в некоторый приличный диапазон (я могу предоставить подробности о том, как, если хотите).