我写了一个函数模板:
template <class T> void fun(T tt){
//здесь какая-то работа с tt
}
现在我想如果类型 T 很小,那么在实例化参数时,应该按值传递:
void fun(little_struct tt){
//здесь какая-то работа с tt
}
如果类型 T 很大,那么在实例化期间通过引用传递参数:
void fun(big_struct& tt){
//здесь какая-то работа с tt
}
问题:
- 是否可以在 C++ 中执行此操作(以便编译器本身确定参数的大小并相应地实例化模板)。
- 如果可能,怎么做?那么如何指定参数大小的标准,之后参数将通过引用传递?
单一功能选项
但编译器无法推断
T. 我没有想到如何使用模板来解决这个问题。所以我可以建议你写或者做一个宏
所以不适合?
你可以玩游戏
conditional但是你需要在调用时明确指定类型 -
我脑子里有东西在转,如何解决……但我无论如何都不能相信它:),但还有足够的其他工作。如果潜意识本身解决了问题:) - 我会添加它。
您无法更改类型并仍然保留可演绎的上下文(即调用时不指定类型)。但在 C++ 中,几乎所有不能直接解决的问题都是间接解决的。所以你只需要引入一层间接。我们将用代码稍微重命名您的函数,它看起来像这样:
现在我们将编写一个辅助函数来为我们完成所有必要的工作:
就这样。您可以添加另一组布尔变量来覆盖向量、字符串等 - 所有这些都是基本添加的。
PS我希望这里的兴趣纯粹是学术性的,因为这样区分没有意义。像这样的函数在实际代码中没有位置。