我试图弄清楚如何在我的函数模板中编译一些代码来确定T&#39的返回值的大小,其中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之类的其他ifs,如果这些甚至可以工作的话。
感谢。
答案 0 :(得分: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; };