模板参数=void*的编译器错误 - 页 20

 
pavlick_:

按钮灯通过g 与虚拟性。

老生常谈的例子。

这不是一个多态性的例子,也不是一个模式的例子。这只是一个使用bool变量的例子,其他的什么都没有(除了厚厚的一层哈士奇)。

模板是不可能取代多态性 的。

 
Dmitry Fedoseev:

模板不能以任何方式取代多态性

我哪里说了不对?问题是,多态性是想取代模板。

 
pavlick_:

我在哪里说过不这样做呢?问题是,多态性试图取代模板。

确切地说,你是想用一个拐杖来代替正常的OOP方法)模板实际上只在存储数据和一些接口中需要,比如IComparable<T>。

它们几乎没有任何性能上的好处。在你的第二个例子中,编译器嵌入了一切,因为那里的一切都很明确。

 
Alexey Navoykov:

确切地说,你是想用一个拐杖来代替正常的OOP方法)模板实际上只在存储数据和一些接口中需要,比如IComparable<T>。

它们几乎没有任何性能上的好处。在你的第二个例子中,编译器镶嵌了所有的东西,因为那里所有的东西都是明确的。

这不是我的例子,这是一个典型的依赖关系倒置的例子。不要挑剔它的简单性,它只是展示了一个想法,如果我写了一张代码,你会说 "嗯,是的,那是一个不同的东西 "吗?

模板已经成为一个拐杖,是的。.好了,我今天就到此为止吧。

 
顺便说一下,回到void*,我刚刚意识到,在C++中,即使是dynamic_cast 也不能用它来工作(不能编译),这是符合逻辑的,因为我们只是有一个指向内存区域的非个人指针。这就是为什么它只能被明确地投下。这就是为什么void*本身在C++中是无用的。 在MQL中一切都不同。但出于兼容性的考虑,我们应该避免对void*类型的 指针使用dynamic_castdelete