这些C ++语句意味着什么?

时间:2015-03-25 10:21:57

标签: c++

在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点意味着什么?

2 个答案:

答案 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这样的外部库是没有意义的。