gpt4 book ai didi

c++ - 如何为静态成员编写 std::is_member_{object,function}_pointer?

转载 作者:太空狗 更新时间:2023-10-29 21:17:33 24 4
gpt4 key购买 nike

<type_traits>标准头文件定义了元函数

template< class T >
struct is_member_object_pointer;

template< class T >
struct is_member_function_pointer;

template< class T >
struct is_member_pointer;

如果可能的话,如何为static 成员变量和函数编写一组类似的元函数?为什么这些元函数不是 <type_traits> 的一部分? (或 boost 的等价物)?

最佳答案

它们是 <type_traits> 的一部分以 std::void_t 的名义,自 C++17 起。通过它,您可以检查特定类类型是否具有成员变量和/或函数。

例如检查类类型是否为Type有一个成员对象 x你会使用类似的东西:

template<class, class = std::void_t<>>
struct has_x : std::false_type {};

template<class T>
struct has_x<T, std::void_t<decltype( std::declval<T&>().x )>> : std::true_type {};

对于成员函数也是类似的 x()你会使用:

template<class, class = std::void_t<>>
struct has_x_mem_fn : std::false_type {};

template<class T>
struct has_x_mem_fn<T, std::void_t<decltype( std::declval<T&>().x() )>> : std::true_type {};

关于c++ - 如何为静态成员编写 std::is_member_{object,function}_pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32683238/

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