2013-08-24 2 views
1

У меня есть класс контейнера, который можно назвать TestClass и общим классом свойств Property.Обработка динамических свойств для класса в C++

Теперь мне нужно сделать, чтобы разные экземпляры TestClass имели несколько «Свойства». Эти свойства будут добавляться динамически, а новые могут быть определены во время выполнения.

Наивный способ обращения с этим, похоже, просто имеет нечто вроде вектора, в котором хранятся различные экземпляры класса Property.

class TestClass{ 
    public: 
     std::vector<Property> properties ; 
     addProperty(Property newProperty) {....} 
     getProperty(String name) {....} 
} ; 

class Property{ 
String name ; 
double value ; 
Definition definition ; 
.... 
}; 

class Definition { 
.... 
} ; 

Однако то, что мне нужно делать в другой части моей программы есть эффективный способ сказать GetPropertyValue («X») из TestClass ... сначала проверьте, что существующая собственность, а затем извлечь стоимость имущества .... а также множество других операций.

Использование наивного подхода приведет к очень неэффективному методу проверки определенного свойства (при догадках, основанных на имени свойства).

ответ

1

Вы можете использовать std::map, используя имя объекта в качестве ключа и свойства в качестве значения. очень похоже на ваш наивный подход, но гораздо быстрее.

0

Вы должны использовать карту или другой контейнер ассоциативного массива. Что-то вроде:

class TestClass{ 
    public: 
     std::map<string, double> properties ; 
     .... 

Позволяет эффективно проверять наличие существующих объектов.

+0

К сожалению, класс свойств будет более сложным, чем просто имя и значение. – oracle3001

Смежные вопросы