首页 > 解决方案 > 获取成员函数返回类型的大小

问题描述

我有带有成员函数的类/结构。我想检查返回类型的大小是否正确。

#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,但似乎并非如此。这里发生了什么?

标签: c++typesstl

解决方案


invoke_result定义为:

template< class F, class... ArgTypes>
class invoke_result;

因此,这是有效的

return sizeof(std::invoke_result_t<decltype(&QString::ucs2), QString>);

推荐阅读