我有一个模板函数,它接受一个模板类型的只读参数。这是一个适用于各种平台的库函数,从 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 ){ ... }
?
最佳答案
您可以使用 std::is_fundamental
检查该值是否为内置类型,如果为真,则重载/专门化以按值传递。
使用类型支持库还有更多需要专门研究的东西 <type_traits>
例如 is_enum
, is_trivially_copyable
, is_array
还有很多。我建议您检查一下,看看哪种最适合您。
std::is_fundamental
的引用链接:
https://en.cppreference.com/w/cpp/types/is_fundamental
<type_traits>
的引用链接:
https://en.cppreference.com/w/cpp/header/type_traits
关于c++ - 在 C++ : copy or reference, 或中传递只读参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402532/