函数指针作为友元函数

Function Pointer as a Friend Function

本文关键字:函数 友元 指针      更新时间:2023-10-16

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

我已经打字定义了函数签名:

typedef f32 generate_height(f32 x, f32 y);

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

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

我希望这个函数指针能够访问TerrainChunk的私有属性。我可以通过它们,但不同的功能可能需要不同的属性——例如,我可能需要在某些功能中访问地形的网格,或者在其他功能中访问地势的位置。因此,这将很快成为一个非常大的函数签名,既不理想也不可扩展。

我试着把friend关键字放在不同的地方,但没有成功。

关于如何实现此功能,有什么建议吗?

您不能使函数指针成为TerrainChunk的朋友。您只能使函数成为TerrainChunk的朋友。

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

正如一些程序员dude建议的那样,工作循环是将一个指向(const(TerrainChunk的引用(或指针(传递给函数,并为TerrainChunk提供足够的公共访问器函数,使generate_height函数可以获得所需的所有信息。

(您可以使访问器联机,这样就不会对性能造成任何影响(。