【问题标题】:How do you implement a wrapper function to change other function's return type?你如何实现一个包装函数来改变其他函数的返回类型?
【发布时间】:2011-07-12 00:11:08
【问题描述】:

假设在第 3 方库中有这样一个函数:

rttype func(...);

如何编写一个功能相同但不同之处在于其返回类型是rttype * 而不是rttype 的包装函数?

【问题讨论】:

  • 我尝试的是,我不能简单地通过&ret 来完成它,因为它在函数退出后超出了范围。

标签: c


【解决方案1】:

一般来说,你不会。有时朝另一个方向走可能是合理的,但在您返回指针的那一刻,您就会引入生命周期和所有权问题。特别是,你要返回一个指向什么的指针,释放它指向的内存是谁的责任(如果有的话)?

这些问题通常会影响整体设计,因此您无法在一个简单的包装器中合理地解决它们。

【讨论】:

    【解决方案2】:

    您将必须分配全局内存(堆上的内存),在那里分配 rttype,然后返回一个指向已分配内存的指针。当然,这样做你以后也必须处理释放内存的问题。

    但是,这样做是在修改函数的语义和设计,您应该牢记这一点,并负责任地进行其他更改以尊重这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2018-07-08
      相关资源
      最近更新 更多