问题标签 [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 回答
565 浏览

c++ - 在仅具有模板化返回类型的函数模板中混合模板特化和 enable_if

我有以下代码无法在 VC2010 上编译:

错误消息似乎是错误的,因为第一个版本的foo()功能似乎与template <class C> C foo();愉快地编译的相同。

有没有办法混合匹配启用的功能模板和显式模板专业化?

0 投票
4 回答
1126 浏览

c++ - 我可以将 enable_if 之类的东西与隐式转换运算符一起使用吗?

我有一个(基本完成的)矩阵类(稍后在这篇文章中)。如果矩阵是 1x1 矩阵,那么我想隐式转换为支持类型(例如,1x1 浮点矩阵应该转换为浮点数)。

有没有办法在不创建专业化和复制 Matrix 中的所有方法的情况下做到这一点?(例如使用类似的东西std::enable_if?)当且仅当 ROWS == COLS == 1 时,我基本上想启用隐式转换。

0 投票
3 回答
402 浏览

c++ - enable_if : 模板库的模板化方法被多次继承的情况

如果我有一个带有模板方法的模板基类:

例如,我简化了方法:只有当 T == U 时它才必须“存在”

如果 A 是此类:

然后我有我想要的:

编译,但是

不编译:错误:没有匹配函数调用 'A::f(double&)' 这是预期的行为。

现在让我们 A 也继承自S<double>

然后以下代码无法编译:

我希望没有歧义:f<int>仅存在于S<int>

在编译器错误中,我们可以注意到在编译这段代码时知道 T,但不知道 U (U = U)。

任何解释或“解决方法”?

0 投票
4 回答
408 浏览

c++ - 在编译时根据模板参数排列类结构

在 C++ 中是否可以根据模板参数包含/排除成员变量?

这是一个例子:

由于它们有许多共同的属性,只有一个类来表示一个数字(带有额外的模板参数)可以防止一些代码重复。

我想做的是

因此,如果第二个参数为 void,则不会有名为 imag 的成员,产生:

我尝试了 enable_if 但没有得到任何结果。

如果这是不可能的,是否有任何黑客可以使这成为可能?

0 投票
1 回答
994 浏览

c++ - enable_if 对类模板的成员模板函数

这似乎是 MSVC10 中的错误?

错误 C2770:无效的显式 template_or_generic 参数“enable_if::type A::t(void)”。

以下编译:

0 投票
3 回答
2166 浏览

c++ - enable_if 函数在不应该被定义的时候定义

作为一个实验,我正在尝试根据类模板参数创建一个没有参数的 void 成员函数更改行为:

但是,我得到:错误:重载“MyFunc()”的调用不明确。不应该只定义这些函数中的一个或另一个,因为除了 ! 在其中之一?

0 投票
1 回答
396 浏览

c++ - 有没有办法使用 SFINAE 来确定对模板化函数的调用是否会由于提供的类型而失败?

我有一个模板类,我使用它来提供一个方法,该方法将用于boost::lexical_cast将其std::string参数转换为模板中指定的类型,前提是可以进行词法转换。目前要检查是否有可能,我只是检查是否operator>>为所讨论的类型定义了。这是一个人为的例子,基本上说明了我在做什么:

到目前为止,这适用于我的代码:所有无法通过词法转换的类型都以第一个版本结束,所有其他类型以第二个版本结束,至少对于我的代码使用它的类型。我担心的是,我基本上是在假设只要目标类型是 InputStreamable ,那么 lexical_cast 就不会失败。lexical_cast的boost 文档概述了一些其他要求,我可能也应该检查这些要求,而不是创建一个复杂的enable-if并用来mpl::and_将这些条件串在一起,我想知道:有没有办法使用 SFINAE 直接测试对于给定的类型,该调用是否lexical_cast会失败,并且仅当它不会失败时才匹配专用模板?

我只见过测试函数或运算符是否存在的示例,但从未测试过调用具有给定类型的模板化函数是否会产生错误。

0 投票
3 回答
2511 浏览

c++ - 编译器错误 C2766:使用 boost::disable_if 时“显式专业化;‘专业化’已被定义”

我正在尝试构建一个模板类Fod

它将包含一个内部类 At,其中一个static const int value指示模板参数的索引(0 表示 S0,1 表示 S1,依此类推)。很快,它应该满足条件:

我尝试使用boost::disable_if如下:

aux::EmptyType但是当我为 S3 定义专业化并且 S2、S3 都属于同一类型(或者:我为 S2 定义专业化并且 S1、S2 都属于同一类型)时,它会导致错误。

任何想法如何解决这个问题?如果我想要一个方法size_t at<S0>()给 0,size_t at<S1>()给 1...?

请询问您是否需要更多信息。

0 投票
2 回答
333 浏览

c++ - enable_if 不排除模棱两可的模板参数

我想根据成员的“类型”自动选择正确的指向成员的指针,方法是删除接受无关成员的特化(通过 enable_if)。

我有以下代码:

我期待它在所有可能之间选择正确的功能。问题是编译器说“不能将模板参数推断为函数参数不明确”。

似乎我不知道如何使用 enable_if,因为如果是这样,如果指定的函数具有正确的类型,编译器只会允许特化......

请注意,我想要 C++03 解决方案(如果可能)——我的代码必须在一些旧编译器上编译。

提前致谢

0 投票
1 回答
4155 浏览

c++ - std::enable_if,模板特化和继承

我想请教您有关此代码的一些建议。它有效,但我认为它可以用更优雅的方式编写。这是一段 C++11 代码,所以在编译时请记住它;)!

如您所见,我正在尝试编写一个可以处理从AC派生的类的类模板。问题是当AC像类E一样被继承时。事实上,我们也可以有这样的东西......

...但是当一个类(如E)继承AC时,它将失败。

有更好的代码的想法吗?谢谢