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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятка с boost.exceptions, то ли лижи не едут, то ли я "таво" 
V
    Опции темы
boostcoder
Дата 5.9.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

Репутация: 49
Всего: 110



привет.

понадобилось мне спроектировать систему исключений для приложения с возможностью добавления полей в тип исключения. и тут я вспомнил про boost.exceptions. (никогда ее не юзал)
прочел доку. примеры показали неясным и совсем не однозначными. ну, думаю я, закожу хеловорд в надежде на просветление...и кожу до сих пор smile 

пример:
Код

#include <boost/exception/all.hpp>
#include <iostream>

typedef boost::error_info<struct tag_mytype1, int> myval_error;
typedef boost::error_info<struct tag_mytype2, const char*> mystr_error;

struct my_exception: virtual boost::exception, virtual std::exception {};

void func1() {
   BOOST_THROW_EXCEPTION(my_exception() << myval_error(33));
}

void func2() {
   BOOST_THROW_EXCEPTION(my_exception() << mystr_error("44"));
}

bool f = false;

void top_func() {
   if ( !f )
      func1();

   func2();
}

int main() {
   try {
      top_func();
   } catch (const boost::exception& ex) {
      if ( const int* i = boost::get_error_info<tag_mytype1>(ex) )
         std::cout << "val_error: " << *i << std::endl;
      std::cout << boost::diagnostic_information(ex) << std::endl;
   }
   f = true;

   try {
      top_func();
   } catch (const boost::exception& ex) {
/*      if ( const char** c = boost::get_error_info<tag_mytype2>(ex) )
         std::cout << "str_error: " << *c << std::endl;
      std::cout << boost::diagnostic_information(ex) << std::endl;
      */
   }
   
   std::cout << "ping!" << std::endl;
}

http://liveworkspace.org/code/0f96434cc0e3...5b57181ab8621c8

получаю:
Цитата

Compilation finished with errors:
source.cpp: In function 'int main()':
source.cpp:30:64: error: no matching function for call to 'get_error_info(const boost::exception&)'
source.cpp:30:64: note: candidate is:
In file included from boost/exception/diagnostic_information.hpp:16:0,
                 from boost/exception/all.hpp:15,
                 from source.cpp:1:
boost/exception/get_error_info.hpp:117:5: note: template<class ErrorInfo, class E> typename boost::exception_detail::get_error_info_return_type<E, typename ErrorInfo::value_type>::type boost::get_error_info(E&)
boost/exception/get_error_info.hpp:117:5: note:   template argument deduction/substitution failed:
boost/exception/get_error_info.hpp: In substitution of 'template<class ErrorInfo, class E> typename boost::exception_detail::get_error_info_return_type<E, typename ErrorInfo::value_type>::type boost::get_error_info(E&) [with ErrorInfo = tag_mytype1; E = <missing>]':
source.cpp:30:64:   required from here
boost/exception/get_error_info.hpp:117:5: error: invalid use of incomplete type 'struct tag_mytype1'
source.cpp:4:34: error: forward declaration of 'struct tag_mytype1'



декларация функции boost::get_error_info().
вроде все валидно.

так это все же я "таво"?

спасибо.

PM WWW   Вверх
mes
Дата 6.9.2012, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  5.9.2012,  21:49 Найти цитируемый пост)
get_error_info<tag_mytype1>(ex) 

get_error_info<myval_error>(ех)


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


pattern`щик
****


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

Репутация: 49
Всего: 110



мдя, таки это я таво smile 

спасибо. вопрос закрыт.

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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