我正在尝试使用type_traits标头中的is_member_pointer,使用以下语法,例如:
cout << is_member_pointer<decltype(&vector<int>::member)>::value;
Run Code Online (Sandbox Code Playgroud)
在向量的情况下,我得到一个"模板参数无效"和一个罗嗦的"类型...未知"消息,所有迭代器函数和除clear之外的所有修饰函数.其他容器功能也存在类似的故障.我有mingw g ++ 4.6.2.
有没有办法帮助这个?
问题可能是您检查了重载方法的类型.这是不可能的,因为表达式&std::vector<int>::begin没有类型(有两个重载).只有在转换为所需类型后,它才会成为成员函数指针.演员看起来像这样:
std::cout << std::is_member_pointer<decltype((std::vector<int>::iterator(std::vector<int>::*)())&std::vector<int>::begin)>::value;
Run Code Online (Sandbox Code Playgroud)
不是很美观.
使用非重载方法,它可以工作.
std::cout << std::is_member_pointer<decltype(&std::vector<int>::reserve)>::value;
Run Code Online (Sandbox Code Playgroud)
BTW与gcc-4.7,你甚至得到一个更清晰的错误信息:
test.cpp:6:70: error: decltype cannot resolve address of overloaded function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |