gpt4 book ai didi

c++ - 为什么 SFINAE 在此示例中不起作用?

转载 作者:行者123 更新时间:2023-11-28 01:36:51 25 4
gpt4 key购买 nike

#include <iostream>
#include <type_traits>

class CL
{
public:
CL(){}
CL( int ) = delete;
};

template < class T >
class Creator
{
public:
template< std::enable_if_t< std::is_constructible<T, int>::value, int > = 0 >
static T* Create( int arg ) // 1
{
return new T( arg );
}
template< std::enable_if_t< std::is_default_constructible<T>::value && !std::is_constructible<T, int>::value, int > = 0 >
static T* Create( int arg ) // 2
{
return new T();
}
};

int main()
{
Creator<CL>::Create( 2 );
}

这里我给出了第一个 Create 函数无法推导模板参数的错误,但后来我评论了它,第二个重载工作正常。为什么 SFINAE 在第一次过载时不起作用?

最佳答案

您的方法不是模板,而是您的类是模板。你必须改变

template<typename U = T,
std::enable_if_t< std::is_constructible<U, int>::value, int > = 0 >
static T* Create( int arg ) // 1
{
return new T( arg );
}

template<typename U = T,
std::enable_if_t< std::is_default_constructible<U>::value
&& !std::is_constructible<U, int>::value, int > = 0 >
static T* Create( int arg ) // 2
{
return new T();
}

关于c++ - 为什么 SFINAE 在此示例中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926131/

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