作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码。我想在枚举类型上模板化类和类构造函数。但是,这段代码不起作用?我怎样才能实现我想要的?
#include < iostream >
#include < type_traits >
enum class MyType
{
Positive,
Negative
};
template < MyType T >
struct B {
int val = 0;
template<typename U = T>
B(int n, typename std::enable_if<U==MyType::Positive>::type* = 0) : val(n) { };
template<typename U = T>
B(int n, typename std::enable_if<U==MyType::Negative>::type* = 0) : val(-n) { };
};
int main() {
B<MyType::Positive> y(10);
B<MyType::Negative> n(10);
}
最佳答案
您的模板有一个 typename 参数,但您希望将枚举作为参数。让我们解决这个问题:
#include <iostream>
#include <type_traits>
enum class MyType
{
Positive,
Negative
};
template <MyType T>
struct B {
int val = 0;
template<MyType U = T>
B(int n, typename std::enable_if<U==MyType::Positive>::type* = 0) : val(n) { };
template<MyType U = T>
B(int n, typename std::enable_if<U==MyType::Negative>::type* = 0) : val(-n) { };
};
int main() {
B<MyType::Positive> y(10);
B<MyType::Negative> n(10);
}
此外,您可以将 SFINAE 表达式放在模板参数中以整理构造函数参数:
template<MyType U = T, typename std::enable_if<U == MyType::Positive, int>::type = 0>
B(int n) : val(n) { };
template<MyType U = T, typename std::enable_if<U == MyType::Negative, int>::type = 0>
B(int n) : val(-n) { };
关于c++ - 在构造函数上启用_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58609679/
这个问题在这里已经有了答案: Why does the standard library have find and find_if? (4 个答案) 关闭 7 年前。 为什么一些 STL 算法提供
根据 the documentation of the dplyr package : # The _if() variants apply a predicate function (a funct
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why does the C++ standard algorithm “count” return a pt
我是一名优秀的程序员,十分优秀!