如何在没有模板方法的情况下修改函数行为?

时间:2011-06-16 08:31:03

标签: c++

我有一个函数(实际来自ATL,它是ATL::CSoapMSXMLInetClient::SendRequest(LPCTSTR)),其行为应该稍微被修改。也就是说,我只需要在函数中间的某处添加一个函数调用。

考虑到这不是模板方法,改变其行为的最佳做法是什么?我是否必须重写整个功能?

提前致谢。

编辑:从类ATL::CSoapMSXMLInetClient派生并通过稍微修改子类函数定义来复制粘贴整个函数代码不起作用,因为{{1}中使用了大多数成员是“私有”并在子类中访问它们是编译时错误。

如果有的话,我现在正在寻找一种方法来实现它。 :(

2 个答案:

答案 0 :(得分:2)

是的,你会的。如果它位于函数的中间,则无法绕过它。

答案 1 :(得分:1)

您可以使用一些重构方法。但我想不出任何漂亮的,并且都严重依赖于类中的代码,尽管对于你来说,找到任何有用的东西可能很难。

就像你有一条线:

do_frobnicate();
dingbat->pling();

你需要在dingbat plings之后调用somefunc()。如果dingbat是你提供的接口,你可以创建一个新的dingbat,它也可以在pling时执行somefunc()。鉴于这个dingbat plings唯一的地方是这个函数。

此外,如果do_frobnicate()是一个自由函数,并且您希望在此之后添加somefunc(),则可以在类中创建一个函数,或者在其名称空间内创建一个函数。这样你就可以创建自己的do_frobnicate(),也可以执行somefunc()。