问题标签 [enable-if]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
364 浏览

c++ - 如何在类 obj 中使用 enable_if?

下面的代码没问题:

但是当我使用一个类来捆绑它们时,它无法编译:

铿锵++打印:

所以我写了一些东西来欺骗编译器(在第二个中添加一个 S foo):

它仍然无法工作:

我怎样才能让它在课堂上工作?

0 投票
2 回答
151 浏览

c++ - 如何通过'int'类型的'vector来决定' 在 C++ 中?

我可以使用 enable_if 按参数类型分隔行为,例如:

现在我想通过容器的内部类型来区分行为:

我可以在 C++ 中做什么?

0 投票
2 回答
592 浏览

c++ - 递归解引用指针

在尝试在这里回答一个问题时,我发现了这个问题:

如何递归取消引用指针(C++03)?

来自答案的改编代码如下:

但是,在此测试中,它无法将指针对指针取消引用到值类型中:

显然,w并且k只取消引用一次,这导致operator<在两个指针上被调用。

我可以通过添加以下内容来解决此问题:

但随后它将失败int***

有没有办法在不手动添加级别的情况下递归地进行此操作?

注意这只是“理论”问题。

0 投票
1 回答
1094 浏览

c++ - 通过模板参数向类添加方法

我想在类 unsing enable_if 中有一个模板参数特定的函数。它的名称保持不变,参数类型不同(尽管这不应该相关,因为只有一个被初始化)。

我现在得到一个错误,说编译器想用 CASE2 实例化第一个函数,用 CASE1 实例化第二个函数,尽管我认为替换失败不应该导致错误(SFINAE)。我究竟做错了什么?感谢您的任何帮助!

0 投票
2 回答
1036 浏览

c++ - 如何只为字符串或字符串启用此功能

我有一个模板功能,比方说:

我只想为 T == string 或 T == stringpiece 启用此功能。我如何使用 std::enable_if 来做到这一点???

0 投票
1 回答
163 浏览

c++ - 构造函数内的重载函数导致deferencing错误

虽然我知道这是一个愚蠢的想法,但我想看看是否可以对容器和非容器类型使用单个类。首先,我从这个问题中复制粘贴代码。

然后我有两个辅助函数:一个确定成员函数变量的类型(是否T有成员value_type),另一个确定operator *.

我的课看起来像这样:

cur应该是指向T而不是const_iteratorifT没有value_type成员的指针。如果是这种情况,则 begin 和 end 未使用。

这就是我的 init 函数的逻辑。

我已将问题缩小到这一行。如果我直接删除init<T>(t)并复制粘贴第一个重载的内容,我会得到正确的结果。否则,我会得到不正确的结果。

例如,不正确的输出是:

它似乎正在调用正确的函数。问题是什么?

编辑

出于某种原因,更改函数签名以init(const U& t) {解决问题。谁能解释为什么?

编码


Valgrind 错误:

当我不调用时,Valgrind 没有检测到错误init<T>(t)


0 投票
4 回答
9803 浏览

c++ - 如何将 std::enable_if 与自推断返回类型一起使用?

C++14将具有可以根据返回值推断返回类型的函数。

我可以将此行为应用于通过返回类型习语为 SFINAE使用enable_if的函数吗?

例如,让我们考虑以下两个函数:

如您所见,使用 SFINAE 通过返回类型习语选择正确的函数。但是,这些都是 void 函数。的第二个参数enable_if默认设置为void。这将是相同的:

我可以对这两个函数做些什么,以便通过返回值推断出它们的返回类型?

gcc 4.8.2(使用--std=c++1y

0 投票
3 回答
838 浏览

c++ - 如何使用 SFINAE 选择最接近的匹配类型特征?

场景:
我有多种类型可以归类为序列容器。
所有序列容器都是数据结构,但并非每个数据结构都是序列容器。

这是代码中说明的示例。此示例中涉及的唯一“重要类型”是 Array_T。它分为两类:它是一个序列容器,并且由于所有序列容器都是数据结构,因此它又是一个数据结构。

请注意,不能对 Array_T 进行继承;它必须保持它已宣布的方式。


问题:
我想写两个函数。一个函数将处理所有序列容器,而另一个函数将处理所有数据结构。我不知道序列容器函数是否真的存在,因为这部分代码可能会或可能不会生成。

那么,如何使用元模板编程,为类型选择最接近的匹配标识?以下是预期行为的两个示例:

情况1:

案例二:


到目前为止我的尝试:

现在我意识到这不起作用,因为 enable_ifs 的两个值都是 true。
所以我想在数据结构函数中添加第二个 enable_if 来检查序列容器函数是否存在。像这样的东西:

这就是我卡住的地方。有没有办法在不触及 Array_T 减速且不涉及第三个调度函数的情况下做到这一点?

0 投票
5 回答
767 浏览

c++ - 在编译期间如何计算数组大小(不接受指针)?

给定一个数组a,我想countof(a)将数组中的元素数作为编译时常量。如果我有一个指针p,我不想countof(p)编译。这似乎应该是(1)直截了当,(2)通常包含在 SO 中,但是(1)我无法让它工作,并且(2)搜索 SO 没有发现任何东西。

这是我的尝试。

帮助?

0 投票
2 回答
230 浏览

c++ - C++11 函数参数

是否有可能以某种方式制作将根据第一个参数接受不同参数的函数(C++11)?可以说,我需要以下行为:

调用示例:

只是想知道这是否可能。我觉得这可能与 enable_if 和模板专业化有关,但可能不是......