Mat*_*ner 3 c++ templates type-conversion c++11
抛开目的和疯狂,有没有办法在C++中实现这一目标?
template <typename P>
void Q void_cast(P Q *p) const
{
return static_cast<P Q *>(p);
}
Run Code Online (Sandbox Code Playgroud)
我试图有效的指针转换为void指针类型,同时保持任何const,restrict和其他预选赛(记Q).
我的印象是C++标准库中有东西(或者不太希望在Boost中),它允许你"调整"类型的属性,比说const_cast或者更精细的粒度static_cast.
所以,你想要const X*- > const void*,volatile X*- > volatile void*等
您可以使用一组重载来执行此操作:
template<typename P>
void* void_cast(P* p)
{
return p;
}
template<typename P>
void const* void_cast(P const* p)
{
return p;
}
template<typename P>
void volatile* void_cast(P volatile* p)
{
return p;
}
template<typename P>
void const volatile* void_cast(P const volatile* p)
{
return p;
}
Run Code Online (Sandbox Code Playgroud)
该新型特质之类的东西add_const,add_volatile,remove_const和remove_volatile.它们用于以已知方式转换类型的cv限定符,而不是将一种类型的cv限定符应用于另一种类型.