在包含预计算结果或可计算结果的结构中使用联合

Using a union in a struct that contains either pre-calculated or calculatable results

本文关键字:结果 结构 包含预 计算 可计算      更新时间:2023-10-16

,所以我需要一个结构。从本质上讲,其目的是从各种功能中返回一系列这些结构。所有这些结构都将被收集(也许几百),然后我最少需要正常。

因此,总而言之,我有这样的情况,其中一个结构只需要一个正常值。

因此,我试图创建一个捕获这个想法的结构。这样,一个选择的结构可以包含其正常或计算方法的方法。因此,我设计了以下结构:

struct result {
    float t;
    bool calculated; // Tells whether to use result.normal.norm or result.norm.calculate()
    union normal {
        float2 norm;
        float2 (*calculate)();
    };
};

这是表达这个想法的正确方法吗?

*以示例为例,其中一些正常的计算可能涉及一些计算,例如TRIG,以在复杂的弯曲表面上找出正常情况。我们只想在绝对必要的情况下进行计算。

(我不相信您提供了足够的上下文来完全回答您的问题,但我会根据您给我的东西尝试。)

这是表达这个想法的正确方法吗?

由于您似乎关心性能 - 可能不是。通过功能指针调用功能是(编辑:)通常很昂贵。更重要的是,该函数在调用时甚至都不会获得t字段的值...因此,这甚至可能无法正常工作。

您该怎么办?

首先,弄清楚这是否是疼痛点W.R.T.表现。不要只是优化它,因为有优化的潜力。

假设这对优化很有用 - 尝试避免整个重点实现。取而代之的是,确定哪种浮子需要其规范,然后愿意花一些努力来实现这一规范;这不会那么糟糕,因为您只会为一条数据而不是全部数据工作。

ps-如今无需使用工会,我们在C 17中有std::variant。也可以为您节省布尔值。