gpt4 book ai didi

C++11:is_member_pointer 不适用于许多 STL 容器函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:56 25 4
gpt4 key购买 nike

我正在尝试使用 type_traits header 中的 is_member_pointer,语法如下:

cout << is_member_pointer<decltype(&vector<int>::member)>::value;

在 vector 的情况下,对于除 clear 之外的所有迭代器函数和所有修饰函数,我都会收到“模板参数无效”和冗长的“......类型未知”消息。其他容器函数也有类似故障。我有 mingw g++ 4.6.2。

有办法解决这个问题吗?

最佳答案

问题可能是你checked the type of overloaded methods .这是不可能的,因为像 &std::vector<int>::begin 这样的表达式没有类型(有两个重载)。只有在转换为所需的类型后,它才会成为成员函数指针。类型转换看起来像这样:

std::cout << std::is_member_pointer<decltype((std::vector<int>::iterator(std::vector<int>::*)())&std::vector<int>::begin)>::value;

不是很美观。

对于非重载方法,它可以工作。

std::cout << std::is_member_pointer<decltype(&std::vector<int>::reserve)>::value;

顺便说一句,使用 gcc-4.7,您甚至会得到更清晰的错误消息:

test.cpp:6:70: error: decltype cannot resolve address of overloaded function

关于C++11:is_member_pointer 不适用于许多 STL 容器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251827/

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