crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в C++: как выбрать тип переменной во время выполнения?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 4.8.2009, 12:39
  Покопался в бусте. Фабрики, одиночки, команды(функторы) нашел....

Буду в этом учебном проекте использовать буст (также для изучения), а читать Александреску про Локи! :)
AD Дата 4.8.2009, 11:57
 
Цитата(Влад @ 4.8.2009, 12:52) *
Хмм..... Обоснуешь?

Блин. Вы меня не запутывайте. :) Так есть или нет? Одиночки, фабрики, посетители, фабричные методы, команды?
Влад Дата 4.8.2009, 11:52
  Хмм..... Обоснуешь?
Tonal Дата 4.8.2009, 10:35
  Всё есть.
AD Дата 4.8.2009, 9:20
  По мере чтения Александреску возник следующий вопрос: все, что имеется в Loki, в boost тоже есть? Или же некоторые вещи уникальны?
Влад Дата 29.7.2009, 10:25
  Ну, а что здесь непонятного? Вот тебе пример, в остальном разберешься сам:
// GCC 4.4.0 - MinGW, Win XP SP3
// boost::any example

#include "boost/any.hpp"
#include <vector>
#include <iostream>

struct Marine
{
    size_t data_size;
    // any oter data....
    Marine(): data_size(36) {};
};

struct Topo
{
    size_t header_size;
    // any oter data....
    Topo(): header_size(12) {};
};

bool is_topo(const boost::any& _elem)
{
    return _elem.type() == typeid(Topo);
}

bool is_marine(const boost::any& _elem)
{
    return _elem.type() == typeid(Marine);
}

typedef std::vector<boost::any> vec;

void process_all(const vec& _v)
{
    for(vec::const_iterator it = _v.begin(); it != _v.end(); ++it)
    {
        if (is_topo(*it))
        {
            std::cout << "Topo, header_size: " << boost::any_cast<Topo>(*it).header_size << std::endl;
            // any other processing....
        }
        else if (is_marine(*it))
        {
            std::cout << "Marine, data_size: " << boost::any_cast<Marine>(*it).data_size << std::endl;
            // any other processing....
        }
    }
}

int main()
{
    vec v;
    Marine m;
    Topo t;

    v.push_back(m);
    v.push_back(t);
    process_all(v);

    return 0;
}


С boost::variant все то же самое.......
AD Дата 28.7.2009, 17:00
 
Цитата(Andrew Selivanov @ 28.7.2009, 17:05) *
Не очень понятно что требуется... массив Any? Или прочитать тип массива и потом массив?..

Ну заголовки топографических и морских карт различаются. Поэтому значения sizeof(....) отличаются и считываемый массив данных, соответственно, тоже.
Andrew Selivanov Дата 28.7.2009, 16:05
 
Цитата(AD @ 27.7.2009, 22:04) *
По иронии судьбы, встала та же задача, только типы не стандартные, а свои - пользовательские. Использовал Loki. Смысл такой: чтение заголовка карты, в зависимости от типа заголовка. Вот такой код получился (понимаю, не самый удачный код, но не закидывайте, пожалуйста, камнями - я только учусь! :) )
<...вырезано много букаф...>


Не очень понятно что требуется... массив Any? Или прочитать тип массива и потом массив?..
AD Дата 28.7.2009, 10:49
 
Цитата(Tonal @ 28.7.2009, 11:43) *
2 AD Всё бы тебе на лисапедах ездить. :)
Boost.Any
Boost.Variant

Локи - прикольная библиотечка для учёбы, но для промышленного использования лучше таки Boost. :)

Ну впринципе я и учусь. Но все-равно спасибо! Посмотрю! :)

P.S. Почитал про указанные конструкции. Непонятно, как их применить к указанному коду?
Tonal Дата 28.7.2009, 10:43
  2 AD Всё бы тебе на лисапедах ездить. :)
Boost.Any
Boost.Variant

Локи - прикольная библиотечка для учёбы, но для промышленного использования лучше таки Boost. :)
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 5:49