gpt4 book ai didi

c++ - 使用 enable_if 禁用模板类的模板构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:04 25 4
gpt4 key购买 nike

当模板构造函数的参数类型与类型“MyClass 匹配时,我试图使用 std::enable_if 禁用模板类的模板构造函数"这样我就可以使用我的其他构造函数,它允许我用另一个模板的类初始化当前模板的类。

template <typename t, size_t size>
class MyClass
{
public:
MyClass() { data.fill(static_cast<T>(0)); }

template <typename... Args> // i want to disable this if Args = MyClass
MyClass(Args&&... args) : data{ std::forward<Args>(args)... } {}

template <size_t size2>
MyClass(const Myclass<t, size2>& other_sized_template) { /*do stuff*/ } // this won't work unless the template ctor above is disabled if the arguments passed are of type Myclass

private:
std::array<t, size> data;
};

最佳答案

您可以通过部分特化的类模板检查该类型是否是 MyClass 的实例化。例如

template<class...>
struct is_MyClass : std::false_type {};

template <typename T, size_t size>
struct is_MyClass<MyClass<T, size>> : std::true_type {};

然后像这样禁用构造函数

template <typename... Args, 
typename = std::enable_if_t<
!is_MyClass<
std::remove_cv_t<
std::remove_reference_t<Args>>...>::value> > // i want to disable this if Args = MyClass
MyClass(Args&&... args) : data{ std::forward<Args>(args)... } {}

LIVE

关于c++ - 使用 enable_if 禁用模板类的模板构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840595/

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