我正在围绕遗留 API编写C++包装器。这个 API 为我提供了一个指针值来保存额外的数据,我想用它来实现小缓冲区优化。
我已经实现了一个is_small_pod
元函数来检查给定类型是否是POD并且它是否适合void*
:
template< typename Type >
struct is_small_pod
: std::integral_constant<
bool
, std::is_pod< Type >::type::value
&& sizeof( Type ) <= sizeof( void* )
>
{};
我正在设置这样的值:
// void*& param;
if( detail::is_small_pod< Type >() )
{
*static_cast< Type* >( ¶m ) = value;
} else {
param = new Type( value );
}
我是否正确实施了这种优化?我相信当值对齐与指针的对齐不兼容时,这将失败(可能是奇怪的角落情况)。这种情况甚至可能,还是我只是想多了?我应该如何扩展我的元功能以检查兼容的对齐方式?