gpt4 book ai didi

c++ - 为什么总是将此模板评估为false_type?

转载 作者:行者123 更新时间:2023-12-01 14:42:49 25 4
gpt4 key购买 nike

我想enable_ifT中存在一个成员函数,因此我尝试在下面编写代码。

    template< typename T, typename = void >
struct has_member_func : std::false_type {};

template< typename T >
struct has_member_func< T, decltype(&T::some_func) > : std::true_type {};


但是,即使类 std::false_type确实有一个名为 T的函数,它始终求值为 some_func
为什么?

最佳答案

当您像has_member_func<X>一样使用它时,第二个模板参数将使用默认值void;但是部分特化的第二个模板参数的类型不是void,则不会选择特化;除非您明确指定第二个模板参数以使其匹配,例如has_member_func<X, decltype(&X::some_func)>(这似乎毫无意义)。

LIVE

在部分特化中,第二个模板参数也应产生void类型,然后可以选择特化。您可以像这样应用 std::void_t (C++ 17起)

template< typename T >
struct has_member_func< T, std::void_t<decltype(&T::some_func)> > : std::true_type {};

LIVE

PS:在C++ 17之前,您可以轻松创建自己的 void_t

关于c++ - 为什么总是将此模板评估为false_type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61972450/

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