是否可以将函数编写为:
void func(uint64_t val) {...}
如果使用uint64_t
之外的任何其他整数类型调用编译时错误,而不修改#pragma
警告,则会生成编译时错误?
即:
uint32_t x = 0;
func(x) {...} // Error!
func(uint64_t(x)) {...} // Succes!
答案 0 :(得分:5)
使用功能模板重载该功能。函数模板将更好地匹配除uint64_t
之外的所有参数类型。您可以定义函数模板,以便在使用时创建错误。
void func(uint64_t val) { ... }
template <typename T>
void func(T)
{
static_assert(false, "argument type is not uint64_t");
}
使用C ++ 11,您可以使用以下模板:
template <typename T>
void func(T&&) = delete;
答案 1 :(得分:4)
这样可行:
template< typename T >
void func( T param );
template<>
void func<uint64_t>( uint64_t param )
{
}
您将收到链接器错误(足够接近)。示例:http://ideone.com/5ft4F