C++ 获取成员函数的返回类型的大小
我有带成员函数的类/结构。我想检查返回类型的大小是否正确C++ 获取成员函数的返回类型的大小,c++,types,stl,C++,Types,Stl,我有带成员函数的类/结构。我想检查返回类型的大小是否正确 #include <iostream> #include <type_traits> struct QString { wchar_t ucs2() {return L"1"[0];} }; int main() { QString arg; std::cout << "wchar_t " << sizeof(wchar_t) << std::en
#include <iostream>
#include <type_traits>
struct QString {
wchar_t ucs2() {return L"1"[0];}
};
int main() {
QString arg;
std::cout << "wchar_t " << sizeof(wchar_t) << std::endl;
std::cout << "std::invoke_result_t<decltype(&QString::ucs2)(void)> " << sizeof(std::invoke_result_t<decltype(&QString::ucs2)(void)>) << std::endl;
}
#包括
#包括
结构QString{
wchar_t ucs2(){返回L“1”[0];}
};
int main(){
QString-arg;
std::cout调用结果
定义为:
template< class F, class... ArgTypes>
class invoke_result;
模板
类调用结果;
因此,这是可行的
return sizeof(std::invoke_result_t<decltype(&QString::ucs2), QString>);
返回sizeof(std::invoke\u result\t);
更简单的解决方案:
int main() {
std::cout << sizeof(QString().ucs2()) << '\n';
return 0;
}
intmain(){
std::coutstd::invoke_result_t
应该是std::invoke_result_t
,因为所有成员函数都将类类型作为隐式的第一个参数,但它不是为我编译的。真正奇怪的是std::result_of_t
做了,并且给出了正确的结果。decltype(&QString::ucs2)(void)
是不带参数并返回成员函数指针的函数类型。这是指向成员函数指针的大小。
int main() {
std::cout << sizeof(QString().ucs2()) << '\n';
return 0;
}