Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator T () 
V
    Опции темы
GoldFinch
Дата 2.10.2009, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



zim22, я ж говорю операторов много, каждый руками перегружать, для (T,Foo), (Foo,T), (Foo,Foo) - слишком долго, а с препроцессором тоже как-то не очень
PM MAIL ICQ   Вверх
mes
Дата 2.10.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



мне кажется что для данного совета по данному вопросу слишком много абстрактности..
имхо, подход сильно зависит от того, кем является foo по отношению к Т и что представляет из себя T ?


Это сообщение отредактировал(а) mes - 2.10.2009, 20:17


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 2.10.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



mes, это выглядит так
Код

class Query
{
public:
    struct RVar
    {
        template<typename T>
        operator T () const
        {
            return boost::lexical_cast<T>(val);
        }

        RVar(const std::string& val_) : val(val_) {}

        const std::string& val;
    };

    RVar operator[] (const std::string& key) const;

    Query(const std::string& rhs) : query_(rhs) {}
private:
    const std::string& query_;
    mutable std::string value_;
};

Query::RVar Query::operator[]( const std::string& key ) const
{
    using namespace BOOST_SPIRIT_CLASSIC_NS;
    parse
        ( query_.c_str()
        , (str_p(key.c_str()) >> ch_p('=') >> (*(anychar_p-'&')) [assign_a(value_)] | *(anychar_p-'&')) % '&'
        );
    return RVar(value_);
}

...................................

создается объект 
    Query query("x=1&y=2");
и из него потом читаются значения
    int x = query["x"];
    int y = query["y"];
PM MAIL ICQ   Вверх
mes
Дата 2.10.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(GoldFinch @  2.10.2009,  19:45 Найти цитируемый пост)
это выглядит так

а проблемa когда query[..] участвует в операциях ? 
там нужно явно указывать куда следует преобразовывать RVar.
Думаю лучше, чтоб не было неясностей, преобразование скрыть за шаблоной функцией, например
Код

template <typename T>  T as() const { return .. }
// тогда
 int x= query["x"].as<int>()+4;


Это сообщение отредактировал(а) mes - 2.10.2009, 22:34


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 2.10.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



mes, так и сделал)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0503 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.