#include <cstddef>#include <iostream>template<typename T,std::size_t N>std::ostream& operator<<(std::ostream& os,const T (&arr)[N]){ /* do stuff */ return os;}int main(){ std::cout << "noooo\n"; /* Fails: ambiguous overload */}
这样的阵列打印运算符是否仍然可以实现?
解决方法 当然:template<typename T,std::size_t N>typename std::enable_if<!std::is_same<T,char>::value,std::ostream&>::typeoperator<<(std::ostream& os,const T (&arr)[N]){ // ...}
这将使用SFINAE在T为char时禁用您的重载.
对于C 03,Boost有enable_if
和is_same
.或者只是自己滚动:
template<class T,class U> struct is_same { enum { value = false }; };template<class T> struct is_same<T,T> { enum { value = true }; };template<bool,class T> struct enable_if {};template<class T> struct enable_if<true,T> { typedef T type; };总结
以上是内存溢出为你收集整理的c – 重载运算符<< for arrays全部内容,希望文章能够帮你解决c – 重载运算符<< for arrays所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)