4

我试图弄清楚如何在我的函数模板中获得一些要编译的代码,这些代码将确定 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_ 或 apply_if 等其他 if,以及这些是否可以工作。

谢谢。

4

1 回答 1

11

您可以使用自己的元功能

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

template<>
struct get_size<void> { static const size_t value = 0; };
于 2011-12-02T11:45:41.203 回答