这是一个完全不同的问题,而不是我之前提出的问题,这就是我发布这个问题的原因.
我想将我的主题定义为一个主观问题,激发解释“为什么”和“如何”的答案.根据Help Center规则允许这样做.
为了使我的问题更具建设性,我为您提供了更好地解释我的主题的资源.
从C++ SuperFAQ下的问题
“你能给我一个简单的理由,为什么虚函数(动态绑定,动态多态)和模板(静态多态)会产生很大的不同?”
作者说,“……程序员可能会编写一些由他们伟大的曾祖父写的框架调用的代码.没有必要改变伟大的爷爷的代码.事实上,对于动态绑定虚拟函数,它甚至不需要重新编译.即使你剩下的只是对象文件和25年前伟大的爷爷写的源代码丢失了,那个古老的目标文件将没有任何东西调用新的扩展名分崩离析.“
他继续说,“这是可扩展性,这是强大的可重用抽象的OO和通用编程.”
此外,我最近阅读了由B Bjarne Stroustrup的创作者撰写的一篇名为“Why C++ is not just an Object-Oriented Programming Language”的论文.在他的论文中,他将语言或技术定义为面向对象的,当且仅当它直接支持:
Abstraction – providing some form of classes and objects.
Inheritance – providing the ability to build new abstractions out of existing ones.
Run-time polymorphism – providing some form of run-time binding.
他还简要提到了通用编程.
6.7 Generic Programming – A major theme in the C
++ community over the last few years has been the development of techniques exploiting the template mechanism.
通过阅读这两个资源,我可以理解旧代码如何通过面向对象的范例来使用新代码.但是,我不明白旧代码如何通过使用泛型编程(在本例中为模板)来使用新代码,因为泛型编程使用静态绑定.根据我之前的相关问题,Ben Voigt评论说,
“对于要与”新“模板代码结合的”旧“模板代码,必须将两者编译在一起.”
C SuperFAQ似乎暗示(对于OO和泛型编程)旧代码不必使用新代码重新编译以使用新代码,并且您应该只需要旧代码中的目标文件.从而,保持代码可重用性.
有人可以回答“为什么”和“如何”旧代码的目标文件可以使用使用通用编程范例的新代码,即使模板是静态绑定?
编辑
我想更详细地解释下面的答案,因为它将帮助我理解更多,并可能帮助其他人理解.由于泛型编程使用静态绑定,因此旧代码的源代码和新代码的源代码必须“一起”重新编译,以使代码可重用性生效.这意味着,如果您只拥有旧代码的目标文件,则无法使用新代码,因为这需要在运行时绑定的动态/后期绑定.
最佳答案 简短的回答是它不能.我猜这就是你联系的答案第一句话的意思:
They can improve reuse by letting old code call new code provided at run time (virtual functions) or compile time (templates).
[强调补充]
对于使用模板的现有代码,您必须重新编译.这意味着你必须从(某种形式的)源代码开始,而不是从目标文件开始(至少不是大多数人认为的普通目标文件).