gpt4 book ai didi

c++ - 有没有办法为类中的所有成员选择使用 `std::optional`

转载 作者:行者123 更新时间:2023-12-03 06:50:09 26 4
gpt4 key购买 nike

考虑类

struct Foo1
{
int n;
double m;
};
struct Foo2
{
std::optional<int> n;
std::optional<double> m;
};
实际上,成员的数量比这更多。有没有办法可以将其模板化为一个类,例如
template<class T>
struct Foo
{
T<int> n;
T<double> m;
};
如果 Tstd::optional然后 FooFoo2 相同,如果 T是“什么都没有”,那么它与 Foo1 相同.它们不必在形式上完全相同,如果您明白我的意思,只需具有相同的成员类型。
那么我可以写 Foo<std::optional> foo2;为了使所有成员可选或 Foo<whatever> foo1;使它们不是可选的。
我正在使用 C++14,但如果这需要超出该标准的技术,我会接受它!

最佳答案

您可以编写一个简单的开关,在类型或其可选之间进行选择:

template <typename T, bool O = false>
using optionally_optional = std::conditional_t<O, std::optional<T>, T>;
然后,按如下方式使用它:
template <bool O>
struct Foo
{
optionally_optional<int, O> n;
optionally_optional<double, O> m;
};

关于c++ - 有没有办法为类中的所有成员选择使用 `std::optional`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64230791/

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