gpt4 book ai didi

c++ - 我可以将 enable_if 与 typedef 一起使用吗?

转载 作者:可可西里 更新时间:2023-11-01 18:08:50 25 4
gpt4 key购买 nike

我想定义一个类型取决于某些条件的变量。我想要这样的东西:

typedef typename enable_if<cond, int>::type Type;
typedef typename enable_if<!cond, double>::type Type;

但是编译器说我重新定义了类型。

我该怎么做?

最佳答案

Can I use enable_if together with typedef?

不,你不能。 std::enable_if如果条件为假,则保留类型未定义。只有条件为真,成员type才被定义;

template< bool B, class T = void >
struct enable_if;

If B is true, std::enable_if has a public member typedef type, equal to T; otherwise, there is no member typedef.

为了使 typedef 正常工作,它需要一个类型来处理两种情况,即条件为真和为假。 enable_if 的实现是为了协助与 SFINAE 相关的场景。

那么

How can I do this?

使用std::conditional .条件将包含条件的 truefalse 结果的成员 typedef (type)。

template< bool B, class T, class F >
struct conditional;

Provides member typedef type, which is defined as T if B is true at compile time, or as F if B is false.

因此,以下内容就足够了;

typedef typename std::conditional<cond, int, double>::type Type;

或者更简洁;

using Type = std::conditional_t<cond, int, double>;

关于c++ - 我可以将 enable_if 与 typedef 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38430467/

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