问题标签 [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++ - 使用模板参数添加/删除数据成员?
考虑以下代码:
在这段代码中,模板参数AddMembers
允许在类中添加一个函数true
。为此,我们使用std::enable_if
.
我的问题是:数据成员变量是否相同(可能有技巧)?(以这样的方式,MyClass<false>
将有 1 个数据成员 ( myVariable
) 并且MyClass<true>
将有 2 个数据成员 (myVariable
和addedVariable
)?
c++ - 专门针对泛型类型的函数组
闲置代码适用于 gcc 4.7。我的想法是我有这些通用函数,它们适用于序列、指针、元组、对、用户定义类型等等。如果其中一个函数是为一个类型定义的,那么所有函数都应该是。我遇到的问题是确定如何专门化它们。我决定定义一个专门针对每种类型的模板类,实现每个功能,然后定义一个仅转发到类内实现的自由功能。
我想做的是将 Mon 专门用于更通用的类型,但是当我再次尝试使用 enable_if 继承技巧时,gcc 抱怨 Mon 已经定义。我还尝试过使第二个模板参数成为 SFINAE 的 true_ 或 false_type 的技术,如本问题中所述,但没有成功编译它。
理想情况下,每当我想到要为其定义动作的一类类型时,我应该能够编写一个 enable_if 并在模板专业化中编写整个函数组。这省去了为每个函数编写一个 enable_if 的麻烦。悲观地,我必须为每个类别中的每种可能的类型专门化该组,以便真正通用。
我可以用通用和可扩展的方式写这个吗?
PS:如果只有概念是 C++11 的一部分。
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 中的嵌套表达式一起使用(或者可能在模板参数中)。
c++ - 迭代器或指针的 std::enable_if 或 SFINAE
我想为MyClass
它编写一个带有参数的构造函数,并且我希望它仅在参数是 apointer
或 an iterator
(具有 的东西iterator_traits
)时编译。如何做到这一点?
c++ - 隐式构造函数可用于从 Base 派生的所有类型(当前类型除外)?
以下代码总结了我的问题:
考虑到我已经有示例代码中的显式构造函数,如何将隐式构造函数限制为从父类派生的所有类(当前类除外),无论其模板参数如何?
编辑:对于来自 Base 的隐式构造函数,我显然可以写:
但是在那种情况下,我是否可以保证编译器不会将此构造函数用作隐式构造函数Derived2<OtherParameter1, OtherParameter2, OtherParameter>
?
EDIT2:在这里我有一个测试:(LWS在这里: http: //liveworkspace.org/code/cd423fb44fb4c97bc3b843732d837abc)
最后一行让我担心。C++标准可以吗?它是 g++ 的错误吗?
c++ - 构造函数中的 C++ 类型特征导致错误
我想要一个带有单个参数的构造函数,并且仅当该参数的类型::t
具有必须是某个其他类型的子类型的成员类型时才启用。我为此使用类型特征,代码如下所示:
但是,g++ 抱怨以下内容:
我做错了什么?
c++ - 为什么这些函数模板都不匹配实例化?
以下代码无法使用 Intel C++ 2013 编译。
这是错误输出:
我哪里错了?
c++ - 懒惰的 enable_if 在工作中睡觉?
使用下面显示的定义,我可以调用qget<0>()
或qget<1>()
使用 G++ (4.7.2),但qget<2>
或“更高”将失败并出现no matching function
错误。同时,Clang++ (3.2) 中的任何一个都失败了。我使用了惰性enable_if 作为最后的手段;虽然我不认为我应该需要它。我知道代码看起来有点奇怪,但是任何人都可以看到错误的来源吗?(Boost 提供了 enable_if 类。)
c++ - 用 enable_if 重载类模板的成员函数
c++ - std::enable_if 第二次询问
我对 std::enable_if 很陌生,想知道如何使用它。我有一个模板类:
我只希望模板有成员 c
如何使用 std::enable_if 做到这一点?这是使用 std::enable_if 的正确案例吗?