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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Построчное считывание текста http://www.cyberforum.ru/cpp-beginners/thread637023.html
Мне нужно занести текст из файла в переменную, причем в таком же виде, как в в самом файле. И если потом потребуется вывести эту переменную в консоль, то абсолютно все пробелы и переносы строк...
C++ Извлечение из памяти по указателю Не могу понять, как с помощью указателя извлечь строку из памяти имея адрес типа Integer. Указателю ведь нельзя присвоить значение нужного мне адреса. http://www.cyberforum.ru/cpp-beginners/thread637007.html
C++ Чтение строки из памяти
Пытаюсь обратиться к оперативной памяти и прочитать оттуда строку char fullChar = ""; char tempChar = ' '; int i = 0; while(tempChar != '\0' &&...
Найти сколько раз в строке из 16 символов встречается слово "she" C++
Помогите с решением лабы: Найти сколько раз в строке из 16 символов встречается слово "she"
C++ При обработке функции возникает ошибка http://www.cyberforum.ru/cpp-beginners/thread636978.html
При компиляции возникает ошибка: результатом вычисления фрагмента не является функция, принимающая 1 аргументов Вот код программы: #include "stdafx.h" #include <conio.h> #include <string>...
C++ Вывести на экран среднее арифметическое всех отрицательных чисел Помогите пожалуйста в решении задач, может кому нечем заняться и захочется потренироваться :) 1. С клавиатуры вводится 7 целых чисел. Вывести на экран среднее арифметическое всех отрицательных... подробнее

Показать сообщение отдельно
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
13.08.2012, 16:40
Названия полей не знаю. Нужно как-то перемещаться по полям экземпляра без знания названий.
Ну тут так сходу решения и не придумать. Либо какой-то хитрый шаблон делать, который ещё на этапе компиляции вычисляет количество полей, либо в структуру добавлять ещё поле, отвечающее за количество полей. Надеяться на распределение полей в памяти, наверное, плохо (ну т.е. делать предположения, что все они лежат подряд друг за другом, брать указатель на структуру, приводить его к типу поля и последовательно проходить таким образом структуру, инкрементируя этот указатель), да и наврядли что получится.

Цитата Сообщение от nexen Посмотреть сообщение
было бы хорошо узнать, можно ли узнать кол-во полей структуры с разными типами полей?
Тут ещё мудрее. Наверное, опять же можно попробовать придумать какой-нибудь шаблон, вычисляющий число полей на этапе компиляции, например, используя sizeof(). Сейчас сходу я такой придумать не смогу.

Добавлено через 11 минут
Хотя, вспоминая Александреску, можно попробовать применить списки типов. Тут дело обстоит примерно так: создаём нужный нам набор из типов
C++
1
typedef TYPELIST_3(int, double, char) MyTypes;
Далее создаём простой шаблонный класс:
C++
1
2
3
4
5
template <class T>
struct Holder
{
    T value;
}
Затем генерируем класс, который будет наследовать от этого шаблона, подставляя ему типы из списка типов. У Александреску такой шаблонны класс называется GenScatterHierarchy:
C++
1
typedef GenScatterHierarchy<MyTypes, Holder> MyStruct;
В результате получим структуру, в которой будет 3 поля, по одному на каждый из типов в списке, т.е. аналогично тому, если бы мы написали:
C++
1
struct MyStruct: public Holder<int>, Holder<double>, Holder<char> {};
только с той лишь разницей, что количество полей (т.е. количество типов в списке типов) можно вычислить в общем виде:
C++
1
int fieldsNumber = Length<MyTypes>::Value;
"Просто", не правда ли.
В общем, то, что вы хотите сделать - в принципе реально, но это уже высший С++ пилотаж. Советую почитать книгу Александреску, главу про списки типов. С первого раза ничерта не понять, но может быть натолкнёт на какие-то мысли.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru