C模板,vector.size用于默认参数definitoin
发布时间:2020-12-16 10:21:20 所属栏目:百科 来源:网络整理
导读:有结构TA template typename Tstruct TA{ typedef std::vector T Type;}; 和test()函数具有类型TA的默认参数. template typename Tvoid test ( typename TAT::Type a1,typename TAT::Type a2 = typename TAT::Type(a1.size()) ){} 是否可以在默认参数a2定义
有结构TA
template <typename T> struct TA { typedef std::vector <T> Type; }; 和test()函数具有类型TA的默认参数. template <typename T> void test ( typename TA<T>::Type a1,typename TA<T>::Type a2 = typename TA<T>::Type(a1.size()) ) {} 是否可以在默认参数a2定义中使用a1.size()? int main() { TA <double> ::Type a1; test<double>(a1); } 解决方法
不可以.标准禁止这样做.您不能使用函数参数来设置其他参数的默认值. §8.3.6/ 9(C 03)明确指出,
所以解决方案是:使用过载: template <typename T> void test(typename TAs<T>::Type a) { test(a,typename TA<T>::Type(a.size())); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |