问题标签 [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 投票
2 回答
8356 浏览

c++ - 使用模板参数添加/删除数据成员?

考虑以下代码:

在这段代码中,模板参数AddMembers允许在类中添加一个函数true。为此,我们使用std::enable_if.

我的问题是:数据成员变量是否相同(可能有技巧)?(以这样的方式,MyClass<false>将有 1 个数据成员 ( myVariable) 并且MyClass<true>将有 2 个数据成员 (myVariableaddedVariable)?

0 投票
2 回答
715 浏览

c++ - 专门针对泛型类型的函数组

闲置代码适用于 gcc 4.7。我的想法是我有这些通用函数,它们适用于序列、指针、元组、对、用户定义类型等等。如果其中一个函数是为一个类型定义的,那么所有函数都应该是。我遇到的问题是确定如何专门化它们。我决定定义一个专门针对每种类型的模板类,实现每个功能,然后定义一个仅转发到类内实现的自由功能。

我想做的是将 Mon 专门用于更通用的类型,但是当我再次尝试使用 enable_if 继承技巧时,gcc 抱怨 Mon 已经定义。我还尝试过使第二个模板参数成为 SFINAE 的 true_ 或 false_type 的技术,如本问题中所述,但没有成功编译它。

理想情况下,每当我想到要为其定义动作的一类类型时,我应该能够编写一个 enable_if 并在模板专业化中编写整个函数组。这省去了为每个函数编写一个 enable_if 的麻烦。悲观地,我必须为每个类别中的每种可能的类型专门化该组,以便真正通用。

我可以用通用和可扩展的方式写这个吗?

PS:如果只有概念是 C++11 的一部分。

0 投票
1 回答
461 浏览

c++ - boost::enable_if MSVC

我有代码,可以按预期编译和运行,gcc但不能编译MSVC 2012 RC,我无法解释原因,所以它是错误MSVC,或者我的代码不正确?

http://liveworkspace.org/code/45d78872a2c7f30192277a81c655b471

MSVC 说,push_back并且at不是Some<vect_t>.

编辑。

它看起来像 MSVC 2012 中的错误,因为

给出错误,我不能push_back int进入std::vector<boost::mpl::vector<int, double> >,所以它选择一般情况,而不是专业化......

编辑。

奇怪......但这按预期工作

所以,我无法解释为什么,但 MSVC 2012 不能与 enable_if 中的嵌套表达式一起使用(或者可能在模板参数中)。

0 投票
1 回答
2612 浏览

c++ - 迭代器或指针的 std::enable_if 或 SFINAE

我想为MyClass它编写一个带有参数的构造函数,并且我希望它仅在参数是 apointer或 an iterator(具有 的东西iterator_traits)时编译。如何做到这一点?

0 投票
3 回答
530 浏览

c++ - 隐式构造函数可用于从 Base 派生的所有类型(当前类型除外)?

以下代码总结了我的问题:

考虑到我已经有示例代码中的显式构造函数,如何将隐式构造函数限制为从父类派生的所有类(当前类除外),无论其模板参数如何?

编辑:对于来自 Base 的隐式构造函数,我显然可以写:

但是在那种情况下,我是否可以保证编译器不会将此构造函数用作隐式构造函数Derived2<OtherParameter1, OtherParameter2, OtherParameter>

EDIT2:在这里我有一个测试:(LWS在这里: http: //liveworkspace.org/code/cd423fb44fb4c97bc3b843732d837abc

最后一行让我担心。C++标准可以吗?它是 g++ 的错误吗?

0 投票
1 回答
393 浏览

c++ - 构造函数中的 C++ 类型特征导致错误

可能重复:
我必须在哪里以及为什么要放置“模板”和“类型名称”关键字?

我想要一个带有单个参数的构造函数,并且仅当该参数的类型::t具有必须是某个其他类型的子类型的成员类型时才启用。我为此使用类型特征,代码如下所示:

但是,g++ 抱怨以下内容:

我做错了什么?

0 投票
1 回答
449 浏览

c++ - 为什么这些函数模板都不匹配实例化?

以下代码无法使用 Intel C++ 2013 编译。

这是错误输出:

我哪里错了?

0 投票
1 回答
270 浏览

c++ - 懒惰的 enable_if 在工作中睡觉?

使用下面显示的定义,我可以调用qget<0>()qget<1>()使用 G++ (4.7.2),但qget<2>或“更高”将失败并出现no matching function错误。同时,Clang++ (3.2) 中的任何一个都失败了。我使用了惰性enable_if 作为最后的手段;虽然我不认为我应该需要它。我知道代码看起来有点奇怪,但是任何人都可以看到错误的来源吗?(Boost 提供了 enable_if 类。)

0 投票
1 回答
1361 浏览

c++ - 用 enable_if 重载类模板的成员函数

可能重复:
std::enable_if 有条件地编译成员函数

我正在尝试为Foo<T>::bar()以下特定类型重载该方法T——但没有成功。我很感激指针和解决方法。

ideone上编译它会产生以下编译器错误:

0 投票
1 回答
205 浏览

c++ - std::enable_if 第二次询问

我对 std::enable_if 很陌生,想知道如何使用它。我有一个模板类:

我只希望模板有成员 c

如何使用 std::enable_if 做到这一点?这是使用 std::enable_if 的正确案例吗?