如果T可以为空,我如何安全地得到(T)的大小

How do I get the sizeof(T) safely in boost if T can be void?

本文关键字:安全 何安全 如果      更新时间:2023-10-16

我正试图找出我们如何得到一些代码来编译,这将决定T的返回值的大小,其中T是一个函数原型,在我的函数模板。

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)不是一个有效的操作-即使我试图构造一个if语句,如果类型是void,它将返回0的大小。我对BOOST MPL相当陌生,所以,虽然我已经浏览了一段时间的文档,但我不确定如何应用其他if,如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; };