Я хочу определить некоторые произвольные свойства для каждой точки в некоторых классах, но тип и количество свойств не были определены ранее. Итак, мне нужно сохранить их в векторе, но я не знаю, как определить вектор, чтобы каждый элемент мог быть не определенного размера и иметь различное количество полей. Класс выглядит следующим образом:
class UnstructuredMesh
{
std::vector<size_t> m_cellBegIndices; //!< Cell Beginning Indices
std::vector<size_t> m_faceBegIndices; //!< Face Beginning Indices
std::vector<OSG::Pnt3f> m_points; //!< Points
std::vector<????, ????> m_pointProperties; //!< Point Properties
};
Может кто-нибудь, пожалуйста, помогите мне с этой проблемой?
Хорошо, хорошо, учитывая комментарии, которые я решил, я приведу пример того, что я предложил. Трудно точно понять, что вы делаете, но это предполагает, что вы заполняете вектор некими исполняемыми компонентами, которые должны выполнять разные задачи.
Я вижу, что вы уже решили свою проблему, но что-то вроде ниже может сделать более понятным решение. Очевидно, что в реальном приложении освобождение памяти для вектора должно выполняться в некоторой лучшей форме, и не забывайте включать виртуальный деструктор в реальную жизнь. Но это компилируется и запускается.
#include "windows.h"#include <tchar.h>
#include <vector>
#include <stdio.h>
class iface
{
public:
virtual void execute() = 0;
};
class do_stuff_A : public iface
{
private:
int A;
int B;
public:
do_stuff_A()
{
A = 1;
B = 2;
}
void execute() override
{
printf("\nA is %d, B is %d", A, B);
}
};
class do_stuff_B : public iface
{
private:
double A;
double B;
double C;
public:
do_stuff_B()
{
A = 1.1f;
B = 2.2f;
C = 3.2f;
}
void execute() override
{
printf("\nA is %f, B is %f, C is %f", A, B);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<iface*> my_vec;
my_vec.push_back(new do_stuff_A());
my_vec.push_back(new do_stuff_B());
my_vec[0]->execute();
my_vec[1]->execute();
Sleep(3000);
for (int i = 0; i < my_vec.size(); i++)
{
delete my_vec[i];
}
return 0;
}