功能指针作为朋友功能

时间:2018-08-06 09:08:20

标签: c++ oop function-pointers friend

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

我已经定义了函数签名:

typedef f32 generate_height(f32 x, f32 y);

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

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

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

我尝试将friend关键字放在不同的地方,这没用。

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

1 个答案:

答案 0 :(得分:1)

您不能将函数 pointer 设为TerrainChunk的朋友。您只能将 functions 设为TerrainChunk的朋友。

这意味着您只能结交有限的一组函数。您无法在运行时加载任意函数,并且无法读取TerrainChunk的私有部分。

正如Some programmer dude所建议的那样,工作流程是将对(const)TerrainChunk的引用(或指针)传递给该函数,并为TerrainChunk提供足够的公共访问器函数,以便generate_height函数可以获取所需的所有信息。

(您可以将访问器设置为嵌入式,因此不会造成任何性能损失)。