作为友元函数的函数指针

Function Pointer as a Friend Function

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

我已经对函数签名进行了类型定义:

typedef f32 generate_height(f32 x, f32 y);

现在,在 class 我正在使用函数指针:

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

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

我试过将 friend 关键字放在不同的地方,但没有用。

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

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

的朋友

这意味着您只能结交一组有限的功能朋友。您不能在 运行 时间加载任意函数并使其能够读取 TerrainChunk.

的私有部分

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

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