c++ - 获取成员函数返回类型的大小
问题描述
我有带有成员函数的类/结构。我想检查返回类型的大小是否正确。
#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;
}
结果是,例如,
wchar_t 4
std::invoke_result_t<decltype(&QString::ucs2)(void)> 16
所以我得到不同的尺寸。我希望std::invoke_result_t<decltype(&QString::ucs2)(void)
是我的 ucs2 函数的返回类型,即 wchar_t,但似乎并非如此。这里发生了什么?
解决方案
invoke_result
定义为:
template< class F, class... ArgTypes>
class invoke_result;
因此,这是有效的
return sizeof(std::invoke_result_t<decltype(&QString::ucs2), QString>);
推荐阅读
- laravel - 如何将数据传递给控制器
- html - 有没有办法删除 Chrome 在使用时添加的三角形标签?
- r - 如何创建序列 1 12 123
- python - 在pygame中检测键盘输入时只有某些键有效
- javascript - 如何在 HTML 文件中查找 JSON 字符串
- mysql - 错误:后向断言在正则表达式的偏移 16 处不是固定长度
- perl - IO::Select 循环以某种方式阻止孩子退出?
- python - 无法在 GCP 上导入 Wordcloud 或 skmultilearn
- maven - Arquillian Container Payara Managed 无法启动域 - ClassNotFoundException: DomainResource
- angular - 从来自Angular的RESTful服务的大数据中获取特定字段的最佳实践是什么?