问题标签 [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.
c++ - 如何在类 obj 中使用 enable_if?
下面的代码没问题:
但是当我使用一个类来捆绑它们时,它无法编译:
铿锵++打印:
所以我写了一些东西来欺骗编译器(在第二个中添加一个 S foo
):
它仍然无法工作:
我怎样才能让它在课堂上工作?
c++ - 如何通过'int'类型的'vector来决定' 在 C++ 中?
我可以使用 enable_if 按参数类型分隔行为,例如:
现在我想通过容器的内部类型来区分行为:
我可以在 C++ 中做什么?
c++ - 递归解引用指针
在尝试在这里回答一个问题时,我发现了这个问题:
来自答案的改编代码如下:
但是,在此测试中,它无法将指针对指针取消引用到值类型中:
显然,w
并且k
只取消引用一次,这导致operator<
在两个指针上被调用。
我可以通过添加以下内容来解决此问题:
但随后它将失败int***
。
有没有办法在不手动添加级别的情况下递归地进行此操作?
注意这只是“理论”问题。
c++ - 通过模板参数向类添加方法
我想在类 unsing enable_if 中有一个模板参数特定的函数。它的名称保持不变,参数类型不同(尽管这不应该相关,因为只有一个被初始化)。
我现在得到一个错误,说编译器想用 CASE2 实例化第一个函数,用 CASE1 实例化第二个函数,尽管我认为替换失败不应该导致错误(SFINAE)。我究竟做错了什么?感谢您的任何帮助!
c++ - 如何只为字符串或字符串启用此功能
我有一个模板功能,比方说:
我只想为 T == string 或 T == stringpiece 启用此功能。我如何使用 std::enable_if 来做到这一点???
c++ - 构造函数内的重载函数导致deferencing错误
虽然我知道这是一个愚蠢的想法,但我想看看是否可以对容器和非容器类型使用单个类。首先,我从这个问题中复制粘贴代码。
然后我有两个辅助函数:一个确定成员函数变量的类型(是否T
有成员value_type
),另一个确定operator *
.
我的课看起来像这样:
cur
应该是指向T
而不是const_iterator
ifT
没有value_type
成员的指针。如果是这种情况,则 begin 和 end 未使用。
这就是我的 init 函数的逻辑。
我已将问题缩小到这一行。如果我直接删除init<T>(t)
并复制粘贴第一个重载的内容,我会得到正确的结果。否则,我会得到不正确的结果。
例如,不正确的输出是:
它似乎正在调用正确的函数。问题是什么?
编辑
出于某种原因,更改函数签名以init(const U& t) {
解决问题。谁能解释为什么?
Valgrind 错误:
当我不调用时,Valgrind 没有检测到错误init<T>(t)
。
c++ - 如何将 std::enable_if 与自推断返回类型一起使用?
C++14将具有可以根据返回值推断返回类型的函数。
我可以将此行为应用于通过返回类型习语为 SFINAE使用enable_if的函数吗?
例如,让我们考虑以下两个函数:
如您所见,使用 SFINAE 通过返回类型习语选择正确的函数。但是,这些都是 void 函数。的第二个参数enable_if
默认设置为void
。这将是相同的:
我可以对这两个函数做些什么,以便通过返回值推断出它们的返回类型?
gcc 4.8.2(使用--std=c++1y
)
c++ - 如何使用 SFINAE 选择最接近的匹配类型特征?
场景:
我有多种类型可以归类为序列容器。
所有序列容器都是数据结构,但并非每个数据结构都是序列容器。
这是代码中说明的示例。此示例中涉及的唯一“重要类型”是 Array_T。它分为两类:它是一个序列容器,并且由于所有序列容器都是数据结构,因此它又是一个数据结构。
请注意,不能对 Array_T 进行继承;它必须保持它已宣布的方式。
问题:
我想写两个函数。一个函数将处理所有序列容器,而另一个函数将处理所有数据结构。我不知道序列容器函数是否真的存在,因为这部分代码可能会或可能不会生成。
那么,如何使用元模板编程,为类型选择最接近的匹配标识?以下是预期行为的两个示例:
情况1:
案例二:
到目前为止我的尝试:
现在我意识到这不起作用,因为 enable_ifs 的两个值都是 true。
所以我想在数据结构函数中添加第二个 enable_if 来检查序列容器函数是否存在。像这样的东西:
这就是我卡住的地方。有没有办法在不触及 Array_T 减速且不涉及第三个调度函数的情况下做到这一点?
c++ - 在编译期间如何计算数组大小(不接受指针)?
给定一个数组a
,我想countof(a)
将数组中的元素数作为编译时常量。如果我有一个指针p
,我不想countof(p)
编译。这似乎应该是(1)直截了当,(2)通常包含在 SO 中,但是(1)我无法让它工作,并且(2)搜索 SO 没有发现任何东西。
这是我的尝试。
帮助?
c++ - C++11 函数参数
是否有可能以某种方式制作将根据第一个参数接受不同参数的函数(C++11)?可以说,我需要以下行为:
调用示例:
只是想知道这是否可能。我觉得这可能与 enable_if 和模板专业化有关,但可能不是......