gpt4 book ai didi

c++ - 有没有一种方法可以避免在std::variant类成员中为所有类型编写构造函数?

转载 作者:行者123 更新时间:2023-12-01 15:05:01 27 4
gpt4 key购买 nike

我有这样的struct:

struct A
{
int a;
std::variant<int, float, char> b;

A() = default;
};

我想添加一个构造函数,它将初始化 ab。看来我将不得不为 b中的所有类型(例如 A::A(int a1, int b1)A::A(int a1, float b1)等)编写一个构造函数。

有办法避免这种情况吗?

最佳答案

您可以为您的类创建一个模板化的构造函数,并且充其量可以应用完美的转发将其参数传递给variant成员的构造函数:

template <typename T>
A::A(int i, T&& t) : a(i), b(std::forward<T>(t)) { }

然后,您可以编写例如:
A obj1(1, -7.4f);  // float variant member
A obj2(2, 7); // int variant member
A obj3(3, 'c'); // char variant member

不会涉及不必要的移动/副本/临时工作。

关于c++ - 有没有一种方法可以避免在std::variant类成员中为所有类型编写构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59677167/

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