在C ++中使用以下术语时,我感到非常困惑,并且总是让我离开C ++并且只回到C,Java,Python。
任何人都可以解释我为什么使用它吗?
例如,我正在通过一遍又一遍地阅读来学习这个项目: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;
第1点<Chimera>
做了什么?
第2点<bool>
做了什么?
第4点意味着什么?
答案 0 :(得分:3)
假设您正在谈论this<syntax>
,那么这只是templates的用法。模板是编写generic types and functions的C ++方式。
例如,std::vector
(容器)是一个类模板。实例化它时,需要指定其通用参数。例如,您可以std::vector<int>
(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。
答案 1 :(得分:2)
没什么好看的,真的。
boost :: shared_ptr 只是boost命名空间中声明的类型。它来自Boost C++ libraries,这是一套很棒的实用程序库,可以通过实用的函数和类来简化编程。
如果您没有声明std::cout
using namespace std;
一样
它基本上是在另一个命名空间的范围内声明的东西,并且通过使用operator ::你告诉编译器在哪里寻找定义。
第2行只是一个常规函数调用,使用其参数的另一个函数调用结果。
第3行是typedef,很可能用于不必一直输入boost :: optional。您可以在此typedef之后写boost::optional someName;
,而不是键入param_type someName;
。
考虑阅读一本书,而不是你正在做什么。如果你甚至不理解语言的语法,那么潜入代码也会使用像boost这样的外部库是没有意义的。