如何解决C ++检测到传递给函数的const int
| 我有一个函数,用于设置缓冲区时用于强制类型匹配:void SetUInt8(size_checker<uint8_t> val)
{
// make some static checks
}
通常,它是这样调用的:
// compile error,since you might mean to call the SetUInt() function
int myvar = 10;
SetUInt8(myvar);
// works fine
int8_t myvar = 1;
SetUInt8(myvar);
此调用引起警告,因为an2被解释为int
:
SetUInt8(30);
但是我真的希望从30 <256开始就可以。在理想情况下,我希望调用不必更改,但是我想出了以下几点:
template<size_t T>
void SetUInt8()
{
ASSERT(T < 256);
// do other stuff
}
当然会使用哪种方式:
SetUInt8<30>();
另外,我可以在调用函数时进行强制转换:
SetUInt8(uint8_t(30U));
关于将30转换为int或如果其编译时间常数检测其实际值的问题,是否还有另一种方法?
解决方法
我最好的想法是为您提供function8ѭ的模板,静态声明的函数:
template<size_t size>
void SetUInt8()
{
BOOST_STATIC_ASSERT(size < 256);
SetUInt8(static_cast<uint8_t>(size));
}
像你一样叫它:SetUInt8<50>();
由于希望总是内联它,因此没有性能开销,并且可以进行编译时范围检查。更好的情况是,如果编译器足够聪明,当值明显适合较小类型的范围时不发出警告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。