C++ 如何检查一个函数是否正在接收一个无符号整数?

luc*_*one 5 c++ int unsigned

我有一个函数声明为:

void foo(unsigned int x)
Run Code Online (Sandbox Code Playgroud)

如何检查 foo() 没有收到负数?我希望如果我调用 foo(-1) 会抛出异常,但当然由于 x 会自动转换为无符号,因此我无法检查其正性,例如:

if not(x>=0){ do_something();};
Run Code Online (Sandbox Code Playgroud)

或类似的检查。

wic*_*ich 2

实际上没有什么好的方法可以做到这一点,但是您可以通过一些技巧来做到这一点:

1) 声明一个未定义的更好匹配:

void foo(unsigned int x) {
  //do something
}

void foo(int x);
Run Code Online (Sandbox Code Playgroud)

2)使用typeid来判断类型。

  • 我喜欢 #2 的要点,并且使用 C++11 实用程序会变得更好。我确信[这个](http://liveworkspace.org/code/5d72d4ed342ba48c82076217f51efffe)并不完美,但它确实给出了可能性的要点。 (2认同)