检测c数组中的数据类型
发布时间:2020-12-16 10:13:35 所属栏目:百科 来源:网络整理
导读:这是打印出buf数组的c代码,填充0,1,2,… 254 #include iterator#include iostream#include numericint main(){ int buf[255]; auto it_b = std::begin(buf); auto it_e = std::end(buf); std::iota(it_b,it_e,0); std::copy(it_b,std::ostream_iteratordeclt
这是打印出buf数组的c代码,填充0,1,2,… 254
#include <iterator> #include <iostream> #include <numeric> int main() { int buf[255]; auto it_b = std::begin(buf); auto it_e = std::end(buf); std::iota(it_b,it_e,0); std::copy(it_b,std::ostream_iterator<decltype(*it_b)>(std::cout," ")); std::cout << std::endl; return 0; } 我试图让它变得通用,所以只有一个地方的类型是明确的给定int 由于我需要明确声明ostream_iterator的类型,我想知道实现这个目标的最佳方法是什么. > decltype(* it_b) 使用这种或那种方法的优点/缺点是什么? 在这个时候假设我们坚持使用C风格的数组. 解决方法
要严格正确,您应该使用
std::iterator_traits :
std::copy(it_b,std::ostream_iterator< typename std::iterator_traits<decltype(it_b)>::value_type >(std::cout," ")); 单独使用decltype(* it_b)的一个问题是它在大多数情况下会返回一个引用,这会使你要实例化的外部模板混乱.您也可以手动删除引用: std::copy(it_b,std::ostream_iterator< std::remove_reference_t<decltype(*it_b)> >(std::cout," ")); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |