gpt4 book ai didi

c++ - 在构造函数上启用_if

转载 作者:行者123 更新时间:2023-11-30 02:13:57 25 4
gpt4 key购买 nike

我有以下代码。我想在枚举类型上模板化类和类构造函数。但是,这段代码不起作用?我怎样才能实现我想要的?

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com