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>();
由于希望总是内联它,因此没有性能开销,并且可以进行编译时范围检查。更好的情况是,如果编译器足够聪明,当值明显适合较小类型的范围时不发出警告。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...