2015-03-25 6 views
-11

В C++ следующие термины при использовании меня очень путают, и это всегда заставляло меня уйти от C++ и сидеть на C, Java, Python.Что означают эти C++-выражения?

Может ли кто-нибудь объяснить мне, почему вы его используете?

, например, я учу этот проект, читая снова и снова: https://github.com/RSATom/WebChimera/blob/master/src/Chimera.cpp

1 - boost::shared_ptr<Chimera> thisPtr = FB::ptr_cast<Chimera>(shared_from_this());

2 - opts.set_enable_fs(allowfs.convert_cast<bool>());

3 -

typedef boost::optional<std::string> param_type; 
    typedef const FB::variant&   param_vtype; 

Что <Chimera> в точке 1 делает? Что делает <bool> в пункте 2? Что означает пункт 4?

+0

Вы должны прочитать о документации 'boost :: shared_ptr <>'. –

+3

В вашем вопросе нет «точки 4». – milleniumbug

+0

C++ - это не язык, на котором вы можете окунуть свои пальцы, если вы хотите сделать что-то нетривиальное. Вам нужно прочитать хотя бы одну книгу, чтобы получить ее. –

ответ

3

Предполагая, что вы говорите о this<syntax>, то это просто использование templates. Шаблоны - это C++ способ записи generic types and functions.

Например, std::vector (container) - это шаблон класса. Когда вы создаете экземпляр, вам необходимо указать его общие параметры. Например, вы можете получить std::vector<int> (a vector от int), std::vector<bool> и т. Д. Когда вы это сделаете, компилятор генерирует фактические классы, комбинируя шаблон шаблона и ваши общие аргументы.

Существует множество других способов использования шаблонов, включая C++ smart pointers. Умные указатели представляют собой набор шаблонов, которые предлагают автоматическое и детерминированное управление памятью (например, boost::shared_ptr является одним из этих шаблонов, причем boost::shared_ptr<bool> является одним типом, сгенерированным из этого шаблона, в частности, для значений bool).

В принципе вы можете думать о шаблонах как о продвинутых и более мощных копиях макросов C. Или как Java's generics, но проверено с использованием более легкого набора текста (я бы сказал, что это что-то вроде structural typing) и offering more flexibility.

2

Ничего необычного, действительно.

boost :: shared_ptr - это просто тип, объявленный в пространстве имен boost. Это от Boost C++ libraries, красивый набор библиотек-утилит, облегчающих программирование с его практическими функциями и классами.

Так же, как можно было бы написать std::cout, если вы не объявить using namespace std;

Это в основном то, что декларируется в пределах другого пространства имен, и с помощью оператора :: вы сообщаете компилятору, где искать определение ,

Строка 2 представляет собой обычный вызов функции с использованием результата другого вызова функции для его параметров.

Строка 3 - typedefs, скорее всего, используется для того, чтобы не набирать boost :: optional все время. Вместо ввода boost::optional someName; вы можете написать param_type someName; после этого typedef.

Рассмотрите возможность чтения книги вместо того, что вы делаете. Дайвинг-голова в код, который также использует внешние библиотеки, такие как boost, бессмыслен, если вы даже не понимаете синтаксис языка.

+1

'boost :: shared_ptr' не является типом. –

+1

Boost - это набор библиотек. –

+1

Иначе хороший ответ. +1 –

Смежные вопросы