如何决定模板方法的值和引用
How do you decide on value vs reference for template methods
如果我有一个像
这样的模板函数template<typename T>
void doSomething(const T arg) {.....}
,我不知道如果T是一个简单的int或如果它是一个巨大的结构体。如果是int型,则按值传递是有意义的,而结构体则应按引用传递。
如何设计一个具有两种类型参数的模板函数?
boost::call_traits
库有几个类似的帮助程序。特别是call_traits<T>::param_type
定义了一个类型,该类型表示将类型T的形参传递给函数的"最佳"方式。
你可以这样使用:
template<typename T>
void doSomething(typename boost::call_traits<T>::param_type arg) {.....}
它的基本工作原理是为特殊情况对类进行专门化。因此,例如,问题中的int
案例(间接地)专门针对int
(而不是int &
)。
你的问题是XY问题。你是在要求一个问题的解决方案,而这个问题只会从另一个问题的糟糕"解决方案"中产生。所以,在这里我决定回答你最初的问题。
因为你的模板函数几乎肯定必须是inline
,大多数编译器将优化函数调用,并与它的问题。因此,实际上您使用什么并不重要,但T const&arg
是更保守的。
所以,在"解决"这个问题之前,你应该测试一个简单的int
的两个选项之间是否有任何可测量的差异(与生产风格的优化开关)。
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 将成员函数指针作为参数传递给模板方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- 在 cpp 文件中隐藏采用模板参数引用的方法
- C++11:模板方法的模板函数调用无法编译?
- 如何从ECS中的模板方法获取组件?
- 使用 SFINAE 设计模板方法
- 一个模板方法,用于同时接受常量和非常量参数
- 我可以引用模板的基类吗?
- C++模板方法中的循环依赖关系
- 使用移动语义:右值引用作为方法参数
- 如何继承返回对当前对象的引用的方法?
- 在 C++ 中使用模板方法重写类方法
- 类中的模板方法
- 基于枚举参数调用专用模板方法
- 具有引用限定符的模板方法的重载分辨率
- 对 C++ 中模板方法的未定义引用
- c++模板方法专门化以返回指针或引用
- .cpp文件中模板类的非模板方法-未定义的引用
- 如何决定模板方法的值和引用