gpt4 book ai didi

c++ - "Enable_if"结构数据成员

转载 作者:行者123 更新时间:2023-11-28 04:54:30 24 4
gpt4 key购买 nike

是否有任何“更干净”的方式(我的意思是减少重复代码)来编写以下内容?

template < bool condition >
class Test {

struct Foo1 {

int a;
};

struct Foo2 {

int a;
int b;
};

using type = std::conditional_t<condition, Foo1, Foo2>;
};

我在这里只想启用或禁用结构的单个数据成员。所以如果我只需要一个结构就好了。

类似于:

template < bool condition >
class Test {

struct type {
int a;
if constexpr(condition)
int b;
};
};

最佳答案

我不知道这对你来说是否“更干净”,但是......你可以用这种方式编写一个自动继承(某种)类 Foo (不幸的是,它可以完成但在 Test)

之外
// common part
template <bool>
struct Foo
{ int a; };

// only when `Cond` is true
template <>
struct Foo<true> : public Foo<false>
{ int b; };

Test成为

template <bool Cond>
struct Test
{ using type = Foo<Cond>; };

下面是一个完整的编译示例

template <bool>
struct Foo
{ int a; };

template <>
struct Foo<true> : public Foo<false>
{ int b; };

template <bool Cond>
struct Test
{ using type = Foo<Cond>; };

int main ()
{
decltype(Test<true>::type::a) a1;
decltype(Test<true>::type::b) b1;
decltype(Test<false>::type::a) a0;
// decltype(Test<false>::type::b) b0; // compilation error
}

关于c++ - "Enable_if"结构数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490751/

24 4 0
文章推荐: javascript - jQuery datepicker 年份下拉列表从 1900 年开始,我希望它从底部开始
文章推荐: css - “text-decoration” 和 “:after” 伪元素,重访
文章推荐: javascript - 如何使页面加载时向下滚动到
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com