我在类中使用函数指针以允许在运行时扩展功能。
我已经定义了函数签名:
typedef f32 generate_height(f32 x, f32 y);
现在,在类中,我正在使用函数指针:
class TerrainChunk
{
...
private:
generate_height *heightgen;
...
}
我希望允许该函数指针访问TerrainChunk的私有属性。我可以传递它们,但是不同的功能可能需要不同的属性-例如,在某些功能中,我可能需要访问地形的网格,在其他功能中,则需要访问地形的位置。因此,这将很快成为非常大的功能签名,既不理想也不可扩展。
我尝试将friend关键字放在不同的地方,这没用。
关于如何实现此功能的任何建议?
答案 0 :(得分:1)
您不能将函数 pointer 设为TerrainChunk
的朋友。您只能将 functions 设为TerrainChunk
的朋友。
这意味着您只能结交有限的一组函数。您无法在运行时加载任意函数,并且无法读取TerrainChunk
的私有部分。
正如Some programmer dude所建议的那样,工作流程是将对(const)TerrainChunk
的引用(或指针)传递给该函数,并为TerrainChunk
提供足够的公共访问器函数,以便generate_height
函数可以获取所需的所有信息。
(您可以将访问器设置为嵌入式,因此不会造成任何性能损失)。