【发布时间】:2014-12-17 11:58:59
【问题描述】:
我的 C++11 代码无法编译,因为重载函数被重新定义为与参数相同的类型:
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 不需要宏。
-
您是否检查过一些标准库支持从类型确定 printf 说明符?
-
将第二个重载的返回值改为:enable_if
::value, const typename char *>::type;这就是@chris 所说的
标签: c++ c++11 macros uint64 unsigned-long-long-int