作为友元函数的函数指针
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
函数可以获得他们需要的所有信息。
(您可以使访问器内嵌,因此不会有任何性能损失)。
我在 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
函数可以获得他们需要的所有信息。
(您可以使访问器内嵌,因此不会有任何性能损失)。