显式int类型作为参数

时间:2012-10-18 15:39:31

标签: c++ type-conversion

是否可以将函数编写为:

void func(uint64_t val) {...}

如果使用uint64_t之外的任何其他整数类型调用编译时错误,而不修改#pragma警告,则会生成编译时错误?

即:

uint32_t x = 0;
func(x) {...} // Error!
func(uint64_t(x)) {...} // Succes!

2 个答案:

答案 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