【问题标题】:Function Pointer as a Friend Function函数指针作为友元函数
【发布时间】:2018-08-06 09:08:19
【问题描述】:

我在一个类中使用函数指针来允许在运行时扩展功能。

我已经定义了函数签名:

typedef f32 generate_height(f32 x, f32 y);

现在,我在类中使用函数指针:

class TerrainChunk
{
...
private:
        generate_height *heightgen;
...
}

我希望允许此函数指针访问 TerrainChunk 的私有属性。我可以传递它们,但是不同的函数可能需要不同的属性——例如,我可能需要在某些函数中访问地形的网格,或者在其他函数中访问地形的位置。所以这很快就会变成一个非常大的函数签名,既不理想也不可扩展。

我尝试将朋友关键字放在不同的位置,但没有奏效。

关于如何实现此功能的任何建议?

【问题讨论】:

  • 不可能。解决方法是将TerrainChunk 的实例作为参数传递给函数,然后使用其公共函数(当然可以访问私有成员)。
  • @Someprogrammerdude 我也很害怕。但这并不是我想的那么糟糕。谢谢!

标签: c++ oop function-pointers friend


【解决方案1】:

你不能让函数指针成为TerrainChunk的朋友。你只能让函数成为TerrainChunk的朋友。

这意味着您只能与有限的一组函数交朋友。您不能在运行时加载任意函数并让它能够读取TerrainChunk 的私有部分。

正如Some programmer dude 建议的那样,解决方法是将(const)TerrainChunk 的引用(或指针)传递给函数,并为TerrainChunk 提供generate_height 函数可以获得的足够公共访问器函数他们需要的所有信息。

(您可以使访问器内联,因此不会有任何性能损失)。

【讨论】:

  • 谢谢!这行得通,只是编写所有这些额外的访问器很痛苦:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2011-02-04
  • 2012-03-07
  • 1970-01-01
相关资源
最近更新 更多