gpt4 book ai didi

c++ - 我可以用 std::enable_if 摆脱模板特化吗?

转载 作者:太空狗 更新时间:2023-10-29 20:50:28 25 4
gpt4 key购买 nike

我阅读了有关 std::enable_if 的内容:

function overloading based on arbitrary properties of type

所以我试图通过 enable_if 重载类 ctors(如下所示)但是我收到错误消息说 enable_if cannot be used to disable declaration and this in both lines when我使用了 std::enable_if :

#include <iostream>
#include <type_traits>
#include <typeinfo>


template <typename T>
class cls
{
public:

cls (T a, typename std::enable_if< std::is_same<T, int>::value >::type * Dummy = 0)
{
std::cout << "Ctor for int\n";
}

cls (T a, typename std::enable_if< std::is_same<T, char>::value >::type * Dummy = 0)
{
std::cout << "Ctor for char\n";
}
};

int main()
{

cls a(10);
cls b('x');

return 0;
}

那么是否可以使用 enbale_if 重载 ctors。

最佳答案

问题是,例如当你实例化一个 cls<int> ,您总是会从第二个构造函数重载中得到失败的要求,即 std::enable_if< std::is_same<T, char>::value >::typeTint . cls<char> 也一样.

您可以制作构造函数模板来制作SFINAE生效;这将从重载集中摆脱模板特化并且不会导致编译错误。例如

template <typename X = T>
cls (X a, typename std::enable_if< std::is_same<X, int>::value >::type * Dummy = 0)
{
std::cout << "Ctor for int\n";
}

template <typename X = T>
cls (X a, typename std::enable_if< std::is_same<X, char>::value >::type * Dummy = 0)
{
std::cout << "Ctor for char\n";
}

LIVE

关于c++ - 我可以用 std::enable_if 摆脱模板特化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54537474/

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