Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/57: Рейтинг темы: голосов - 57, средняя оценка - 4.54
44 / 44 / 2
Регистрация: 26.10.2009
Сообщений: 298
1

Как работает boost::any?

28.01.2012, 20:45. Показов 10524. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу никак понять, как он работает.

Создал тестовый пример:

C++
1
2
3
4
5
6
7
8
9
10
11
#include <boost/any.hpp>
#include <string>
 
using boost::any_cast;
 
int main()
{
    boost::any a = std::string("WTF???");
 
    return 0;
}
Поставил точку останова в строке
C++
1
boost::any a = std::string("WTF???")
, дебагер увел меня в конструктор boost::any:
C++
1
2
3
4
5
template<typename ValueType>
        any(const ValueType & value)
          : content(new holder<ValueType>(value))
        {// вот сюда привел дебагер
        }
Но как такое возможно, я же явно никакой шаблонный конструктор не вызывал! Существуют способы неявного вызова шаблонных методов что ли?

Спасибо за внимание!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2012, 20:45
Ответы с готовыми решениями:

с wxdev boost работает?
с wxdev boost работает?

Не работает boost::regex_match
Здравствуйте. Пытаюсь спарсить инклуды в .cpp файлах. Для их поиска прохожу по всему файлу и...

Не работает SSL в Boost
Здравствуйте. Пытаюсь написать программу для подключения к серверу. #include &lt;boost/asio.hpp&gt;...

[Code::Blocks] Не работает Boost.Filesystem
Есть скомпилированный Boost (MinGW 6.3.0), Code::Blocks 16.01, Boost 1.65. Подключаю Boost к...

9
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
28.01.2012, 21:50 2
Цитата Сообщение от Vertus Посмотреть сообщение
я же явно никакой шаблонный конструктор не вызывал!
как не вызывал? марш учить язык!
0
44 / 44 / 2
Регистрация: 26.10.2009
Сообщений: 298
28.01.2012, 22:00  [ТС] 3
Цитата Сообщение от retmas Посмотреть сообщение
как не вызывал? марш учить язык!

Не по теме:

Папа с мамой разговаривать с людьми не научили, да?



А слабо показать где я явно вызвал этой записью шаблонный конструктор класса boost::any?
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.01.2012, 22:04 4
Vertus, тип, которым инстанцируется шаблон, выводится из типа параметра. Пример - тот же std::swap. Определяется примерно как
C++
1
2
template<typename T>
void swap(T& a, T& b);
При это вызывать её можно и так
C++
1
std::swap<int>(a, b);
, и так
C++
1
std::swap(a, b);
. Тип будет выведен из типов параметров (они, кстати, во втором случае должны быть одного типа). Так же и тут. Вы конструктору в качестве параметра передаёте объект std::string. Компилятор сам выводит тип и передаёт в качестве аргумента шаблона.
2
44 / 44 / 2
Регистрация: 26.10.2009
Сообщений: 298
28.01.2012, 22:07  [ТС] 5
Цитата Сообщение от silent_1991 Посмотреть сообщение
Vertus, тип, которым инстанцируется шаблон, выводится из типа параметра. Пример - тот же std::swap. Определяется примерно как
C++
1
2
template<typename T>
void swap(T& a, T& b);
При это вызывать её можно и так
C++
1
std::swap<int>(a, b);
, и так
C++
1
std::swap(a, b);
. Тип будет выведен из типов параметров (они, кстати, во втором случае должны быть одного типа). Так же и тут. Вы конструктору в качестве параметра передаёте объект std::string. Компилятор сам выводит тип и передаёт в качестве аргумента шаблона.
Обалдеть, я про это не знал. Это стандарт?
0
Эксперт С++
5056 / 3116 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.01.2012, 22:11 6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Vertus Посмотреть сообщение
Это стандарт?
А как же! Иначе использование шаблонов превратилось бы в сплошную муку. Почитайте Вандевурда, Джосаттиса, у них есть замечательная книжка по шаблонам, так и называется - "Шаблоны С++".
3
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
29.01.2012, 01:08 7
Цитата Сообщение от Vertus Посмотреть сообщение
Папа с мамой разговаривать с людьми не научили, да?
мама с папой не учили, что прежде чем что-то сказать/спросить нужно моцг включать?
2
44 / 44 / 2
Регистрация: 26.10.2009
Сообщений: 298
29.01.2012, 15:12  [ТС] 8
Цитата Сообщение от niXman Посмотреть сообщение
мама с папой не учили, что прежде чем что-то сказать/спросить нужно моцг включать?
Вопрос звучал конкретно, можно ли вызвать шаблонные функции неявно. Если ты такой занятой, то вместо строки флуда, мог просто ответить - "да".

Но надо же свое ЧСВ ублажить.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
29.01.2012, 15:17 9
Цитата Сообщение от Vertus Посмотреть сообщение
ЧСВ
да нет же. все просто: нужно по возможности чаще включать моцг.
0
silent_1991
29.01.2012, 15:18     Как работает boost::any?
  #10
 Комментарий модератора 
Давайте закончим оффтоп.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2012, 15:18

Boost::asio::deadline_timer не работает асинхронно
Код void print1(const boost::system::error_code&amp; e) { std::cout &lt;&lt; &quot;Hello, world!\n&quot;; } ...

Не работает регэкс, содержащий ", VS2010, boost 1.52.0
VisualStudio 2010, boost 1.52.0. При попытке поиска по регэкспу &quot;(?&lt;=HandleId\&quot;\&gt;).*(?=\&lt;\/Data\&gt;)&quot;...

Boost начало работы: Undefined reference to `boost::system::generic_category() '
Добрый день Собственно говоря возникла необходимость использовать boost в работе. Поставил так: ...

Boost Log - undefined reference to `boost::system::system_category()'
Пытаюсь скомпилировать код из примеров Boost Log:#include &lt;boost/log/trivial.hpp&gt; int main(int,...


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

Или воспользуйтесь поиском по форуму:
10
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru