问题标签 [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.
templates - 寻找在 `enable_if` 中使用的 `is_allocator` 类型特征
是否有一种“足够”可靠的方法来检测模板参数中的分配器。也就是说,我需要类似is_allocator
类型特征的东西,它可以用于enable_if
:
假设有一个类模板future(带有模板参数T):
这里,_shared_value
是一个std::shared_pointer<T>
。
c++ - 如何在类模板中使用 boost::enable_if
我正在尝试使用 boost::enable_if 来打开/关闭类模板中的某些功能,但总是得到编译错误错误:在 struct boost::enable_if 中没有名为“type”的类型。
我的片段:
但是以下类似的代码可以正常工作:
我想要实现的是基于类模板中声明的类型禁用/启用一些成员函数。实际上不需要模板成员函数。它们只是为 SFINAE 添加的。
有人可以帮忙吗??
谢谢!
c++ - enable_if 有条件地包含成员函数
我有一个模板类,其类型是迭代器。我想根据我的模板参数的 iterator_category 启用/禁用特定的成员函数。operator--
特别是,如果模板参数是双向迭代器,我想启用。我的尝试是这样的:
Clang 告诉我(大致):error: no type named 'type' in 'std::__1::enable_if<false, MyTemplateParameter>'; 'enable_if' cannot be used to disable this declaration
有没有办法完成我正在尝试的事情?
这是某些情况下的示例:
c++ - std::enable_if 作为构造函数的单个参数
我对模板元编程相当陌生,并且一直在研究一些概念 - 但是,我遇到的这个特定片段让我有点难过。
我在阅读它时假设如果有一个或多个 DATATYPES 参数,它会启用默认构造函数,但是经过测试,我得到的只是一个编译错误。
我会感谢任何帮助我理解这个片段的帮助,因为我理解 enable_if 应该做什么,但在这种情况下,我似乎无法理解实际发生的事情。
编辑:我想这不是“我如何实现这种特殊效果?”的问题。以及更多类似“此代码实际生成的内容,它是否符合我所理解的原作者的意图?”
c++ - 使用带有可变参数模板的条件定义
如果我有一个模板函数,它接受已知数量的模板参数,我可以使用该enable_if
语句以及is_base_of
限制合法类型之类的东西。例如:
现在假设我们想对可变参数模板做同样的事情——检查以确保所有类型都是特定基类的子类。
您将如何编写这个条件定义?
c++ - 无法在 VS .NET 2008 中使用 boost::enable_if 专门化成员函数模板
我正在尝试为两种不同类型的类专门化成员函数模板,如下所示:
而 GCC 4.8.2 编译代码,VS .NET 2008 吐出错误消息:
c++ - 无法匹配使用 boost enable_if 的模板方法
我使用的是 g++4.4.7,它给了我一个编译错误:错误:'serializer & tar'中的'operator&'不匹配</p>
如何实现专业化?
c++ - 为什么这个特征类不起作用,以测试一个类是否具有特定的 typedef?
编辑:
好的,我想通了。我使用false_type
andtrue_type
作为enable_if
我应该何时使用bool
. :X
此外,我已经决定一个is_map_like
班级会更好地检查是否value_type
像,std::pair<const Tkey, Tmapped>
。因此,我的新特征类如下所示:
我想创建一个is_map_like
类型特征类来检查key_type
和mapped_type
。我很难建立这个。现在我只想检查key_type
. 到目前为止,我有以下内容:
value
这里似乎总是回归false_type
。据我了解,SFINAE 应该允许我test
根据是否C::key_type
可访问来选择正确的重载。
以下是我的测试方式:首先,一个专门使用enable_if
on的结构is_map_like
:
这是我在运行时的调用方式:
输出:
T 不是地图类型 T 不是地图类型
我究竟做错了什么?为什么 the test(typename C::key_type*)
even for the map
, which 确实有 a不使用key_type
?还是我使用的问题decltype
?
还有额外的好处:有任何调试技术吗?我如何检查如何选择专业化,甚至在编译时获得关于扩展的验证?也许有特定于 VS 的扩展或编译时调试工具?
c++ - 在模板派生类中禁用方法覆盖
如果 T 不是某种类型,是否可以禁用Foo()
派生类中的覆盖(通过或一些增强魔法),而不必为 编写模板特化?std::enable_if
class Derived
加分项:如果 T 没有定义某种方法,是否可以禁用覆盖?
这是我的SSCCE:
更新:
感谢您提供出色的解决方案,但我无法使它们适应我的真实代码。以下示例应该更好地了解我要实现的目标:
c++ - std::enable_if 在 Visual Studio 2013 中未按预期工作
我正在用 C++ 编写一个小型库,我只希望在模板以算术类型为模板的情况下实例化模板,并且我发现了以下问题:
如果我有以下定义Foo
:
我尝试按如下方式对其进行初始化:
我收到以下错误:
Foo<T, std::enable_if<std::is_arithmetic<T>::value>::type>::Foo( std::initializer_list<U> )
[withT=int
,U=int
] 无法访问
我是std::enable_if
在 TMP 中使用的新手,但根据cppreference.com看来这应该可以工作。我在这里缺少什么,或者这是 VS2013 的错误?