由于语言设计而导致的C++特定模式

ano*_*non 10 c++ garbage-collection design-patterns

我花了很长时间才意识到变量的重要性和微妙性:

1)存在于堆栈中

2)当它们超出范围时调用它们的析构函数

是.

这两件事允许这样的事情:

A)RAII

B)refcounted GC

有趣的是,(1)和(2)没有像C/Assembly这样的"低级"语言; 也不是像Ruby/Python/Java这样的"更高级"语言(因为GC会阻止可预测的对象破坏).

我很好奇 - 由于语言设计的选择,你知道的其他技术是非常C++的.

谢谢!

编辑:如果您的答案是"这适用于C++和其他语言",那也没关系.我想要了解的内容类似于:

通过选择不具有某些功能(如GC),我们获得了其他功能(如RAII +可预测的对象破坏).在C++的哪些领域,通过选择具备其他"更高级别"语言所具有的功能,C++设法获得那些更高级别语言无法表达的模式.

Any*_*orn 7

好奇地反复出现模板模式

表达模板

也许整个元编程概念也是如此


Die*_*lla 3

我真的很喜欢特质课程。不完全特定于 C++(Scala 等其他语言也有),但它允许您调整对象,基本上是指定类型应支持的一组操作。想象一下,您想要一个“哈希器”,即tr1::hash. hash 是为某些类型定义的,但不是为其他类型定义的。如何创建一个为所有所需类型定义哈希值的类?您可以声明一个类,例如:

template < typename T>
struct hashing_tratis
{
    typedef std::tr1::hash<T> hashing_type;
};
Run Code Online (Sandbox Code Playgroud)

也就是说,您期望使用定义了正确 hasing_type 的类。但是,哈希未定义,例如 for myType,因此您可以编写:

template <>
struct hashing_traits<myType>
{
    typedef class_that_knows_how_to_hash_myType hashing_type;
};
Run Code Online (Sandbox Code Playgroud)

这样,假设您需要一种方法来散列您在程序中使用的任何类型(包括myType)。您可以通过创建 hasing 特征来编写“通用”哈希器:

template <typename T>
struct something {
    typename hashing_traits<T>::hashing_type hasher;
    .... // here hasher is defined for all your relevant types, and knows how to hash them
Run Code Online (Sandbox Code Playgroud)