首页 > 解决方案 > 在 C++ 中传递只读参数:复制或引用,或

问题描述

我有一个模板函数,它接受模板类型的只读参数。这是一个适用于各种平台的库函数,从 8 位 (AVR8) 到 32 位 (Cortex)。如何传递这个参数?

template< typename T >
void f( const T p ){ ... }

template< typename T >
void f( const T & p ){ ... }

对于比指针小的参数类型,按值(可能)更有效,对于比指针大和/或复制成本高的参数类型,按引用(可能)更有效。

是否有任何标准方法来抽象这种选择,比如

template< typename T >
void f( pass_efficiently< T > p ){ ... }

?

标签: c++templatesreference

解决方案


您可以使用std::is_fundamental检查该值是否为内置类型,如果为真,则重载/专门按值传递。

对于使用类型支持库,还有更多需要专门处理的内容,例如<type_traits>is_enum等等。我建议您检查一下,看看什么最适合您。is_trivially_copyableis_array

参考链接std::is_fundamental
https
://en.cppreference.com/w/cpp/types/is_fundamental 参考链接<type_traits>
https ://en.cppreference.com/w/cpp/header/type_traits


推荐阅读