Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 122
#1

Получение списка public свойств класса - C++

01.11.2011, 18:20. Просмотров 1707. Ответов 10
Метки нет (Все метки)

Имеется набор различных классов с различными количествами публичных текстовых свойств. Мне нужно эти поля редактировать. Как получить список публичных полей класса и определить тип данных поля, чтение/запись? Это вообще возможно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2011, 18:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Получение списка public свойств класса (C++):

Private и public члены класса - C++
Привет! Есть такой класс: class CDateTime{ private: qint16 year_; qint8 month_, day_; qint8 hours_, minutes_,...

Наследования класса как public, private и protected - C++
Ну допустим у нас есть класс который наследуется как public: class Cylinder : public Point { // ...здесь код } Класс...

Запрещение перегрузки public методов базового класса - C++
Можно ли запретить наследникам перегружать public методы базового класса? Если да то как? class base { public: void...

Запрещение переинициализации public-поля как члена класса - C++
Здравствуйте! Предположим, у нас есть некий класс, в нем есть public-поле, которое выполняет некоторые служебные функции. Нужно...

Получение доступа к переменным класса из другого класса - C++
Как передать по ссылке переменную из класса А в метод класса В?

Структура, как одно из свойств класса - C++
Не могу разобраться, как обращаться к полям структуры, которая является свойством класса. В куске кода описание класса и шаблоны...

10
Сыроежка
Заблокирован
01.11.2011, 18:24 #2
Цитата Сообщение от some777 Посмотреть сообщение
Имеется набор различных классов с различными количествами публичных текстовых свойств. Мне нужно эти поля редактировать. Как получить список публичных полей класса и определить тип данных поля, чтение/запись? Это вообще возможно?
Нет, это невозможно.

Кстати сказать, а не объясните, что означает термин "текстовое свойство"?!
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,544
Завершенные тесты: 3
01.11.2011, 18:37 #3
some777, Вам точно плюсы нужны? В чистых плюсах свойств нет. Другое дело если что-то из .NET
0
LosAngeles
Заблокирован
01.11.2011, 19:25 #4
рефлексия доступна с Qt, покрайней мере кое-что, глубоко я не разбирался. По удобству использования значительно уступает аналогичным средствам Java
http://doc.trolltech.com/4.5/metaobjects.html
в конце страницы ссылки, там пощёлкаешь и раскрутишь всё это дело

Добавлено через 7 минут
Цитата Сообщение от some777 Посмотреть сообщение
Как получить список публичных полей класса
это можно сделать
остальное честно говоря не понял
0
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 122
01.11.2011, 20:26  [ТС] #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Вам точно плюсы нужны? В чистых плюсах свойств нет. Другое дело если что-то из .NET
В .Net на эту тему вообще красота!
Всем откликнувшимся - спасибо, решил хранить список полей прям в классе.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Кстати сказать, а не объясните, что означает термин "текстовое свойство"?!
Прошу не пинать за терминологию, имелось ввиду свойство (поле) типа AnsiString.
0
Сыроежка
Заблокирован
01.11.2011, 20:29 #6
Цитата Сообщение от some777 Посмотреть сообщение
В .Net на эту тему вообще красота!
Всем откликнувшимся - спасибо, решил хранить список полей прям в классе.


Прошу не пинать за терминологию, имелось ввиду свойство (поле) типа AnsiString.
Я думаю, что ваша проблема состоит в том, что вы с одного языка переключились на другой, и стараетесь на нем писать в рамках парадигм предыдущего языка. Как правило, это порочная практика.
0
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 122
02.11.2011, 09:55  [ТС] #7
Как уже сообщал, попытаюсь в каждом классе подготовить массив структур паблик свойств (название, тип, тип доступа).
Хотелось бы в конструкторе каждого из классов заполнить этот массив структур.
Как можно получить список свойств своего класса?
0
LosAngeles
Заблокирован
02.11.2011, 10:43 #8
нету в С++ средств для того чтобы во время выполнения издеваться над классами. На этапе компиляции проблем нет, скурпулёзно заполняй и выводи что хочешь. Но это не рефлексия, а реализация настоящей рефлексии явно выше уровня этого раздела. Для этого как вариант придётся писать чтото вроде moc с Q_OBJECT, нетривиальная задача

Добавлено через 4 минуты
Цитата Сообщение от some777 Посмотреть сообщение
Как можно получить список свойств своего класса?
только один вариант я вижу, хранить этот список в классе или в каждом свойстве добавить информацию о самом себе, что наверно более практично. На этапе выполнения средствами языка - никак, это же не jre
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.11.2011, 10:50 #9
Цитата Сообщение от some777 Посмотреть сообщение
Как уже сообщал, попытаюсь в каждом классе подготовить массив структур паблик свойств (название, тип, тип доступа).
Хотелось бы в конструкторе каждого из классов заполнить этот массив структур.
Скорее всего Вы пытаетесь решить проблему неочевидным способом, может быть, если Вы опишите изначальную проблему, то найдется более благородное решение
0
some777
3 / 3 / 0
Регистрация: 25.09.2009
Сообщений: 122
02.11.2011, 13:57  [ТС] #10
Цитата Сообщение от fasked Посмотреть сообщение
Скорее всего Вы пытаетесь решить проблему неочевидным способом, может быть, если Вы опишите изначальную проблему, то найдется более благородное решение
Из бинарного файла читается структура, которая записывается в поля (текстовые/целочисленные) различных классов. Задача: предоставить графический интерфейс для редактирования полей класса. Классов около десятка, хотелось бы просто в окне редактирования класса динамически набросать компоненты для редактирования в зависимости от выбранного из дерева классов класса.
0
Bers
Заблокирован
02.11.2011, 14:09 #11
some777, есть такой слегка извращённый вариант, когда паблик-членом класса является не сам стринг, а НЕЧТО в духе TProperty<std::string> myPropertyText

Настройка объекта пропертей выполняется конструктором класса (либо, что менее универсально - конструктором проперти спиализированном для стрингов).
То есть происходит настройка "невидимых" геттеров/сеттеров.

Класс-клиент в любом случае должен будит хардкорно самостоятельно знать, какие именно поля-проперти в него воткнули, и уметь выдавать эти данные наружу.

Разных идей реализации шаблонного класса TProperty<тип> в сети гуляет масса.
Некоторые из них весьма шустро работают.

Проблема в том, что в с++ все они в той или иной степени конфликтуют с парадигмой ООП.
И по сути являются костыльным сахаром. Шаг в сторону - нарушение инкапсуляции, шаг в другую сторону - невозможно реализовать тот, или иной функционал для пропертей.


Цитата Сообщение от some777 Посмотреть сообщение
Из бинарного файла читается структура, которая записывается в поля (текстовые/целочисленные) различных классов. Задача: предоставить графический интерфейс для редактирования полей класса.
Очень смутно понимаю суть задачи, но что-то мне подсказывает, что механизм пропертей для этой задачи вообще не нужен. (Впрочем в с++ механизм пропертей не нужен в принципе)

Я бы на вашем месте смотрел бы в сторону "фабрики объектов"
0
02.11.2011, 14:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 14:09
Привет! Вот еще темы с ответами:

Создание класса-списка на основе кода со списком без класса - C++
Здравствуйте. Не могли бы вы показать, как оформить этот код в виде класса. Смысл задания: это засунуть в список большое число(здесь я...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Получение списка процессов - C++
Попытался скинуть в файл список всех процессов: Вариант 1: PROCESSENTRY32 PE32; HANDLE hSnapshot =...

Получение списка активных приложений - C++
взял код с сайта майкрософт msdn не компилит из-за непонятных ошибок скриншот с ошибками прикреплен #include &lt;windows.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru