gpt4 book ai didi

c++具有相同实现的重载函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:21 24 4
gpt4 key购买 nike

我有两个重载函数,比如

void f(int);
void f(std::string);

还有两个重载函数 gf 具有相同的原型(prototype),但它们是 f 的简单包装器,因此它们的实现完全是相同:

void g(int n) { f(n);}
void g(std::string n) { f(n); }

有没有办法避免将 g 的实现写两次?我知道这可以通过像

这样的模板声明 g 来完成
template<typename T> g(T n) { f(n);}

但是我必须像

一样在函数调用中输入类型
g<int>(2);
g<std::string>("42");

我想知道在不强制用户在每个函数调用中显式写入类型名称的情况下,避免编写两次 g 实现的正确方法是什么?

最佳答案

“但是我必须在函数中输入类型”,不,你不必这样做。 模板参数推导 会为您做到这一点。因此,函数模板是一种实用的解决方案。

你写的,

template<typename T> g(T n) { f(n);}

很好,只是它需要一个 void 返回类型。


您可以按如下方式支持移动优化:

template< class Arg >
void g( Arg&& arg ) { f( std::forward<Arg>( arg ) ); }

这里的 && 不表示右值引用,而是所谓的通用引用,因为它应用于已经可以是引用的模板参数。

这样做的效果是 std::forward 在大多数情况下可以准确地重现实际参数的类型,这被称为完美转发

关于c++具有相同实现的重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com