Tôi có một số vấn đề khi dùng decltype
cho con trỏ hàm thành viên:Sử dụng decltype với con trỏ hàm thành viên
#include <iostream>
#include <type_traits>
struct A
{
void func1() {}
typedef decltype(&A::func1) type;
};
int wmain(int argc, wchar_t* argv[])
{
typedef decltype(&A::func1) type;
//Case 1
std::wcout
<< std::boolalpha
<< std::is_member_function_pointer<type>::value
<< std::endl;
//Case 2
std::wcout
<< std::boolalpha
<< std::is_member_function_pointer<A::type>::value
<< std::endl;
system("pause");
return 0;
}
Trường hợp 1 in true
như mong đợi, nhưng Trường hợp 2 in false
.
Có phải là decltype
loại bỏ thuộc tính "thành viên" của một loại không? Nếu vậy, tại sao?
Ngoài ra, có cách nào để ngăn chặn hành vi này không? Tôi cần lấy loại chức năng thành viên bất kể tôi sử dụng ở đâu decltype
.
Vui lòng trợ giúp.
EDIT:
Có vẻ như một hạn chế khác với 'decltype' trong việc triển khai MSVC hiện tại ... – Xeo
Chỉ cần kiểm tra với gcc 4.7, nó xuất ra' true' cho cả hai trường hợp. – Vitus
@Xeo @Vitus Cảm ơn. Microsoft hủy hoại mọi thứ ... – Nubcase