是否可以将函数写为:
void func(uint64_t val) {template <typename T>
void call_with(std::function f, T val) {
f(val);
}
int main() {
自动打印 = [](int x) { std::cout
如果使用任何其他整数类型调用,则会生成编译时错误uint64_t
,无需修改我的#pragma
警告?
ie:
uint32_t x = 0;
func(x) {…} // Error!
func(uint64_t(x)) {…} // Succes!
使用函数模板重载该函数。函数模板将更好地匹配所有参数类型,除了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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)