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

c++ - 使用 enable_if 可选地添加结构成员

鉴于此模板:

...我想使用“enable_if”让 SpecialType 成员有条件地存在;也就是说,仅当模板使用 A=SpecialCase1 或 SpecialCase2 类型实例化时。在所有其他情况下,我希望 SpecialType 成员丢失。

如果您想知道为什么,这是关于优化 - 即不在结构中携带无用的有效负载。我是模板元编程的新手,但我知道我需要“enable_if”和两个“is_same”——虽然不知道具体如何......

编辑:使用通用 C++(即没有 Boost-specifics)将是一个加号。

0 投票
1 回答
371 浏览

c++ - 带有 enable_if 的“伪造”模板类方法特化

我想知道 SFINAE 原则/enable_if 是否可以用来“伪造”类模板方法的部分特化。例如,给定定义Foo了两个版本的类模板Foo::bar。如果(例如)我想启用一个并禁用另一个,T2 = int反之亦然。

PS:请提升 enable_if 的首选。谢谢。

0 投票
2 回答
1581 浏览

c++ - 如何根据类型是整数类型还是浮点类型来更改模板方法?

我正在研究一个 Matrix 类,它同时采用整数(short、int、long)和浮点类型(float、double)。我希望某些方法仅限于浮点类型(例如反转方法),并且某些方法对浮点类型和整数类型具有不同的实现(例如 == 运算符)。我有一种预感,正确的方法是使用 boost 的“enable_if”和“is_integral”/“is_floating_point”,但我似乎无法让它工作。

我的实现类似于这个 c++ 半伪代码:

这会产生很多编译错误,而我认为这些是最相关的:

这表明我不能对不同的类型有不同的实现,至少不使用boost的enable_if,这样对吗?

如果是这样,我该怎么做?我知道模板专业化是一种方法,但我想避免重复太多代码。

0 投票
8 回答
4134 浏览

c++ - 如何有条件地定义默认构造函数?

我在想一个像这样的类:

我认为我不能std::enable_if为此使用构造函数模板(因为没有参数)。我错了吗?如果没有,还有其他方法可以做到这一点吗?

0 投票
1 回答
132 浏览

c++ - 基于基类的特殊成员函数

这个问题类似于: c++ template specialization for all subclasses 而不是模板函数,现在我有一个模板类的成员函数,它需要根据类模板的基类做不同的事情

我找不到一个易于理解的 boost::enable_if 教程。所以我无法为这个小修改获得正确的语法

0 投票
1 回答
1304 浏览

c++ - 带有 std::is_reference 的 std::enable_if 无法编译

就像std::reference_wrapper在幕后使用指针来存储“引用”一样,我正在尝试使用以下代码做类似的事情。

但是,这无法编译:

如何使enable_if参考参数的返回为真?

0 投票
1 回答
564 浏览

c++ - boost:enable_if 在模板类中定义专用方法

我想要一个自定义方法 - 我将在模板类中调用 MyMethod - 我将调用 Foo - 仅当 Foo 已使用某些模板参数类型实例化时(例如,当 A 为 int 且 B 为字符串时),否则,我不希望 MyMethod 存在于任何其他可能的 Foo 实例上。

那可能吗 ?

例子:

boost:enable_if 可以提供帮助吗?

谢谢!!

0 投票
1 回答
516 浏览

templates - C++模板类继承检查

我整天都被这个问题难住了。基本上我想检查以确认模板类型继承自一个适用于我正在做的事情的类。为此,我使用了 std::enable_if,并且我有一些东西在编译时按我想要的方式工作,但是当我尝试对类实际执行某些操作时,我不断收到类似未定义的引用错误。

让源文件编译是一个挑战,但我想出的东西看起来完全是废话,所以我做了一个宏来缩小代码。

我感觉我的宏是错误的,但我的标题是正确的,但这只是一种预感。提前致谢。

0 投票
1 回答
610 浏览

boost - enable_if 和构造函数

这有什么问题?

我认为这应该在使用 enable if 时起作用???

帮助??

不应该排除第二个构造函数吗?

};

0 投票
1 回答
802 浏览

c++ - enable_if SFINAE 的问题

我在编写的程序中遇到了一些莫名其妙的 SFINAE 问题,因此我将其归结为一个独立的示例程序:

该程序编译时没有错误或警告。然而,这:

给出以下错误:

test.cpp:在函数中int main()

test.cpp:22:18:错误:请求从From<Base>非标量类型转换To<Derived>

这是因为我认为替换失败了,并且没有看到构造函数。

我做错了 SFINAE,还是这是一个编译器错误?我在 Windows 上使用 rubenvb 的 GCC 4.7.1(std=c++11如果它有所作为)。