gpt4 book ai didi

c++ - 如果 T 可以为空,如何在 boost 中安全地获取 sizeof(T)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:27 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何在我的函数模板中获取一些代码进行编译,这些代码将确定 T 的返回值的大小,其中 T 是函数原型(prototype)。

template<typename T>
void functionReturnLength()
{
long lReturnTypeSize = boost::mpl::eval_if<
boost::is_void<boost::function_types::result_type<T>::type>::value,
boost::mpl::long_<0>,
boost::mpl::long_<boost::mpl::sizeof_<boost::function_types::result_type<T>::type>::value>>::value;
}

但是它仍然无法编译,因为 sizeof(void) 不是一个有效的操作——即使我试图构建一个如果类型为 void 将返回大小为 0 的 if 语句。我是 BOOST MPL 的新手,所以,虽然我已经浏览了一段时间的文档,但我不确定如何应用其他 ifs,如 if_ 或 apply_if,以及这些是否有效。

谢谢。

最佳答案

你可以使用你自己的元函数

template<typename T>
struct get_size { static const size_t value = sizeof(T); };

template<>
struct get_size<void> { static const size_t value = 0; };

关于c++ - 如果 T 可以为空,如何在 boost 中安全地获取 sizeof(T)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com