Я пытаюсь написать библиотеку C ++ для построения 2D или 3D данных. Моя идея состоит в том, чтобы иметь класс Plot
, который содержит всю информацию, касающуюся осей, заголовка, легенды и так далее. Таким образом, Plot
будет иметь член Axes
, член Title
, et c.
class Plot {publi c: plot () {...} private: Axes axes; Легенда легенда; ...}
Я хочу, чтобы API был настолько интуитивно понятным, насколько это возможно, чтобы его можно было использовать (простой пример) следующим образом:
int main() {
std::vector<float> x_data { 1.0, 2.0, 3.0, 4.0, 5.0 };
std::vector<float> y_data { 5.0, 3.0, 3.0, 3.0, 5.0 };
std::vector<float> z_data { 8.0, 7.0, 1.0, 2.0, 3.0 };
Plot plt; // initializes a generic instance of a plot
// The user can decide to plot 2D data
plt.plot2D(x_data, y_data); // only takes 2 input parameters
// Or to plot 3D data
plt.plot3D(x_data, y_data, z_data); // takes 3 input parameters
}
Проблема (например) Plot
'Axes
member.
В 2D-случае мне бы хотелось, чтобы Axes
было примерно таким:
class Axes
{
public:
Axes() {...}
std::string getAxesInformation()
{
// does something with axes x and y
}
private:
Axis x;
Axis y;
}
В то время как в 3D-случае мне бы хотелось, чтобы быть примерно таким:
class Axes
{
public:
Axes() {...}
std::string getAxesInformation()
{
// does something with axes x, y AND z
}
private:
Axis x;
Axis y;
Axis z;
}
Как мне обрабатывать другое количество переменных-членов? Конечно, можно сохранить bool
, чтобы отслеживать существование z
и прочего, но это не кажется идеальным.
Я бы хотел, чтобы z
вообще не создавалось.