在 C++ 中
void foo(int i)
{ std::cout<<"int"<<std::endl; }
void foo(float i)
{ std::cout<<"float"<<std::endl; }
void foo(void *i)
{ std::cout<<"void *"<<std::endl; }
void foo(bool b)
{ std::cout<<"bool"<<std::endl; }
void main() { foo(0); }
编译时,它会出错。
在visual-studio 2008中,错误是C2668:'function':对重载函数的模糊调用
我知道为什么会出现这个问题,并且我知道使用时间类型转换的解决方案。但我认为这不是一个好的解决方案,因为使用这种方式会扼杀函数重载的词汇性。
在我的项目中,我制作了一个词法对象,将自动类型更改为 int、float、std::basic_string 和函数指针。重载所有类型转换运算符和创建者。但是当我输入“NULL”时,会出现错误 C2668。
事实上它几乎没有问题。唯一严重的问题是使用 FALSE 时。我的项目是核心库,所以我不能指导每个终端客户程序员。
谁知道以更聪明的方式解决这个问题的诀窍或技巧?