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限定符应用于另一种类型.
归档时间: |
|
查看次数: |
245 次 |
最近记录: |