gpt4 book ai didi

c++ - 在两个 typedef 结构之间切换,取决于 bool 值

转载 作者:行者123 更新时间:2023-12-02 09:52:41 25 4
gpt4 key购买 nike

我有一个具有不同功能的类。此类使用两个 typedef 结构。

typedef struct {
struct head;
struct data1;
} data_struct_1;

typedef struct {
struct head;
struct data2;
} data_struct_2;
如果 bool 为真,则应使用 data_struct_2,否则应使用 data_struct_1。当创建对象并将其作为成员变量存储在构造函数中时,将传递 bool 值。
现在有不同的函数和声明,如
int calc_mean(data_struct_1 ds, int a){ ... }
或者
data_struct_1 ds;
ds.data1 = 5;
有没有一种优雅的方式,它允许我在这两个结构之间切换而无需实现数十个 if-cases 并使用标题中的相应结构复制所有相关函数?
首先,如果 bool 为真,我正在考虑继承和覆盖相关函数。但是函数中的标题不同,所以这行不通
也许有类似占位符或模板的东西,但我对 c++ 很陌生

最佳答案

如果 boolean 是编译时值, std::conditional 可能用于:

template <boolean B>
using my_type = std::conditional_t<B, data_struct_1, data_struct_2>;
但似乎 bool 值是运行时值,所以我会使用 std::variant std::visit :
class C
{
using Data = std::variant<data_struct_1, data_struct_2>;
Data m_data;
public:
C(bool b) : m_data{b ? Data{data_struct_1{}} : Data{data_struct_2{}}} {}


auto mean() const {
return std::visit([](const auto& data){ return calc_mean(data, 42); }, m_data);
}
};

关于c++ - 在两个 typedef 结构之间切换,取决于 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63175084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com