1
2
模板元编程是一件很酷的事情。基本的想法?”编译时多态性和隐式接口“, 有效C++ . 基本上,你可以通过模板化的类得到你想要的接口。一 非常 简单例子:
所以在上面的代码中,我们可以对t对象说些什么呢?好吧,它必须与“somestupidobject”兼容,或者它必须可以转换为兼容的类型。它必须与整数值相比较,或者再次转换为一种类型。因此,我们已经为T类定义了一个接口。“有效C++”一书提供了一个更好和更详细的解释。希望上面的代码能让您了解模板的“接口”功能。也可以看看几乎所有的Boost图书馆,它们几乎都是用粉笔画出来的模板。 |
2
4
您可以使用boost::shared_ptr<t>来避免原始指针。另一方面,在Java语法中没有看到指针的原因与C++如何实现接口与Java如何实现接口无关,而是由于Java中的所有对象都是隐式指针(*是隐藏的)。 |
3
0
考虑C++不需要 generic parameter constraints like C# ,那么如果你能摆脱它,你可以使用 boost::concept_check . 当然,这只在有限的情况下有效,但是如果你 可以 使用它作为您的解决方案,那么您肯定会有更快的代码和更小的对象(更少的vtable开销)。 使用vtables(例如,纯虚拟基)的动态分派将使对象随着实现更多接口而增大。 Managed languages do not suffer from this problem (this is a .NET link, but Java is similar). |
4
0
我认为你的问题的答案是否定的——没有比这更容易的方法了。如果你想要纯接口(很好,就像C++中的纯),你必须忍受所有堆管理(或者尝试使用垃圾收集器)。关于这个主题还有其他问题,但我对这个主题的看法是,如果您想要一个垃圾收集器,请使用一种与垃圾收集器一起设计的语言。像Java一样。 减轻堆管理痛苦的一个大方法是自动指针。Boost有一个很好的自动指针,它可以为您完成大量堆管理工作。自动测试是可行的,但在我看来这很奇怪。 您还可以评估是否真正需要这些纯接口。有时是这样,但有时(像我使用的一些代码一样),纯接口只由一个类实例化,因此成为额外的工作,对最终产品没有好处。 |
5
0
虽然auto-ptr有一些奇怪的使用规则, 必须 知道吗*,它的存在是为了让这种东西容易工作。
*首先,不要把自动驾驶仪放在集装箱里。理解他们在任务中做的是另一件事。 |
6
0
这实际上是C++中闪亮的例子之一。C++提供了不绑定到类的模板和函数,这使得重用比纯面向对象语言容易得多。但现实情况是,为了利用这些好处,您必须调整编写代码的方式。来自纯OO语言的人通常会遇到困难,但是在C++中,对象接口不包括成员函数。事实上,它被认为是在C++中使用非成员函数来实现对象接口的良好实践。一旦你掌握了使用模板非成员函数来实现接口的窍门,那么这是一种改变生活的体验。\ |
Schadre · C-plus编码错误 2 年前 |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
amirreza870 · Python OOP-更改类文本 2 年前 |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
Mo Fatah · 如何使用Python类打印数独板? 2 年前 |