![]() |
1
3
这是不可能的。 此时:
编译器已经知道它将调用
你说你也做不到。就这样,你不能。 我建议你别绕着树丛转了,问一个真正的问题。说“这是我正在使用的库,这是我使用它的方式,这是正在发生的事情,但这是我想要发生的事情。怎么样?”或者甚至把范围扩大到“这是我要解决的问题,并解决它…”,以允许完全不同的方法。 但是用不明确的参数和目标来问这些“困惑”的问题是愚蠢的。所以不要。 |
![]() |
2
1
如果可能的话,并且不是一个巨大的痛苦,我更愿意获取和编辑定义
如果源代码不可用或构建它的库将是一个巨大的痛苦,我可能(在Linux上)尝试使用
|
![]() |
3
1
没有可归纳的解决方案,因为Evaluate可能已经内联到了执行中。 |
![]() |
4
1
找到evaluate函数的地址,并使用JMP将其中的第一条指令重写为您自己的指令,这将评估节点的实现定义的表示。 |
![]() |
5
1
容易的。永远不要包含x.h(您的问题从来没有指定它应该包含在任何翻译单元中),并且在另一个头中重新定义类x。问题解决。 编辑:你也可以做一些真正邪恶的事情,比如
然后继承,或者
写你自己的新的x类。 |
![]() |
6
1
可以。
当然,这不会改变已经使用的任何现有翻译单元的行为。
另外,如果你尝试同样的东西没有
|
![]() |
7
0
让全班同学说
|
![]() |
8
0
如果您可以修改解析器,那么就创建一个新的函数evaluateNode,并将新方法放在其中。 您必须用EvaluateNode替换所有要计算的调用。如果您依赖调用来在无法修改的代码中进行计算,那么这将不起作用。 另一种方法是创建另一个节点类,比如modifiablenode,它有一个私有节点,并通过调用节点方法实现它的所有功能,evaluate方法除外。然后在解析器中将节点替换为可修改的节点。 如果您不能修改解析器,那么您必须执行Aschepler建议的操作,并创建一个新的函数,然后以某种方式欺骗链接器提供您的函数而不是库的函数。我不知道如何执行此操作,对我来说这听起来是一个非常糟糕的主意。 |