gpt4 book ai didi

C++检测传递给函数的const int

转载 作者:行者123 更新时间:2023-11-30 04:34:10 25 4
gpt4 key购买 nike

我有一个函数可以用来在设置到缓冲区时强制进行类型匹配:

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);

此调用会导致警告,因为 30 被解释为 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 或检测其实际值(如果它是编译时间常量)的问题?

最佳答案

我最好的想法是一个模板,静态断言函数 static_cast给你:

template<size_t size>
void SetUInt8()
{
BOOST_STATIC_ASSERT(size < 256);
SetUInt8(static_cast<uint8_t>(size));
}

像您一样调用它:SetUInt8<50>();

因为它应该始终被内联,所以没有性能开销,并且它会进行编译时范围检查。如果编译器足够聪明,当值明显适合较小类型的范围时不会发出警告,那就更好了。

关于C++检测传递给函数的const int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com