我有C++ 11代码失败编译因为重载函数与同类型作为参数重新定义之间的差异:编译宏测试uint64_t中和unsigned long长整型
char const* foo(uint64_t) { return "%" PRIu64; }
char const* foo(unsigned long long int) { return "%llu"; }
是否有一个我可以添加编译器宏来检查这两个基元之间的相等性,然后在编译之前删除第二个,如果它是等价的?
还有其他函数为其他类型返回字符指针。举例来说,增加这不会找我麻烦,即使signed
和unsigned long long int
使用相同的字节数:
char const* foo(long long int) { return "%lld"; }
因此,似乎不足以检查类型所使用的内存。什么是其他方法?
无需使用SFINAE的宏。 – chris 2014-10-22 05:08:44
您是否检查过某些标准库支持以确定typef中的printf说明符? – 2014-10-22 05:20:29
将第二个重载的返回值更改为:enable_if :: value,const typename char *> :: type;这就是@chris所说的 –
2014-10-22 14:37:54