当前位置: 首页 > news >正文

C++完美转发实现

C++完美转发实现

完美转发允许函数模板将参数以原始的值类别(左值或右值)转发给其他函数。这是实现通用包装器和工厂函数的关键技术。

万能引用(转发引用)使用T&&语法,可以绑定到任何值类别。

#include
#include
#include

void process(int& x) {
std::cout << "Lvalue reference: " << x << "\n";
}

void process(int&& x) {
std::cout << "Rvalue reference: " << x << "\n";
}

template
void forward_call(T&& arg) {
process(std::forward(arg));
}

void forwarding_basic() {
int x = 42;
forward_call(x);
forward_call(100);
}

std::forward保持参数的值类别。

template
void wrapper(T&& arg) {
std::cout << "Forwarding...\n";
process(std::forward(arg));
}

完美转发可以实现工厂函数。

template
T* create(Args&&... args) {
return new T(std::forward(args)...);
}

class Widget {
std::string name_;
int value_;

public:
Widget(const std::string& name, int value)
: name_(name), value_(value) {
std::cout << "Widget constructed: " << name_ << ", " << value_ << "\n";
}

Widget(std::string&& name, int value)
: name_(std::move(name)), value_(value) {
std::cout << "Widget move-constructed\n";
}
};

void factory_example() {
std::string name = "test";
Widget* w1 = create(name, 42);
Widget* w2 = create("temp", 100);

delete w1;
delete w2;
}

完美转发可以实现包装器类。

template
class FunctionWrapper {
Func func_;

public:
explicit FunctionWrapper(Func f) : func_(f) {}

template
auto operator()(Args&&... args) {
std::cout << "Before call\n";
auto result = func_(std::forward(args)...);
std::cout << "After call\n";
return result;
}
};

int add(int a, int b) {
return a + b;
}

void wrapper_example() {
FunctionWrapper wrapped(add);
int result = wrapped(10, 20);
std::cout << "Result: " << result << "\n";
}

引用折叠规则决定最终的引用类型。

template
void show_type(T&& arg) {
if (std::is_lvalue_reference::value) {
std::cout << "Lvalue reference\n";
} else if (std::is_rvalue_reference::value) {
std::cout << "Rvalue reference\n";
} else {
std::cout << "Not a reference\n";
}
}

void reference_collapsing() {
int x = 42;
show_type(x);
show_type(100);
}

完美转发在标准库中广泛使用。

#include
#include

void standard_library_forwarding() {
auto ptr = std::make_unique("test", 42);

std::vector vec;
vec.emplace_back("widget1", 10);
vec.emplace_back("widget2", 20);
}

完美转发是现代C++泛型编程的核心技术。

http://www.zskr.cn/news/1344951.html

相关文章:

  • ChocolateyGUI 社区贡献指南:如何参与开源项目开发与维护
  • 大规模矩阵SVD与GSVD计算方法【附代码】
  • Raw Accel终极指南:掌握Windows内核级鼠标加速的完整教程
  • 周宁县黄金回收哪家强?铭润稳居第一 - 亦辰小黄鸭
  • 26绵阳黄金回收真实测评!3家门店亲测对比,本地人卖金避坑指南 - 恒顺黄金回收
  • 垣曲县黄金回收哪家强?铭润稳居第一 - 亦辰小黄鸭
  • Airflow Maintenance Dags日志清理完全教程:两种方案应对不同部署环境
  • 理查德米勒海瑞温斯顿梵克雅宝合肥二手腕表行情报价参考 - 李宏哲1
  • 从游戏存档黑盒到透明编辑:uesave工具实战指南
  • Awesome Made by Brazilians 路线图深度分析:巴西开发者开源项目的未来发展趋势预测
  • wechatferry 高级技巧:如何实现AI驱动的智能对话机器人
  • Milton与ImGui集成:现代UI设计在绘画软件中的应用
  • 原阳县黄金回收哪家强?铭润稳居第一 - 亦辰小黄鸭
  • Brushes项目部署教程:从源码编译到App Store发布完整指南 [特殊字符]
  • Android 系统启动全流程深度解析
  • 小爱音箱音乐播放限制破解实战:从基础配置到高级玩法深度解析
  • 【IEEE出版 | EI检索】第六届控制与智能机器人国际学术会议(ICCIR 2026) - 科研小猫(努力毕业版)
  • 云和县黄金回收哪家强?铭润稳居第一 - 亦辰小黄鸭
  • 2026清丰县黄金回收白银回收铂金回收店铺实力排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 智造焕新:解锁 2026 六大激光清洗机品牌核心竞争力 - 品牌评测官
  • 余生黄金回收|2026年荆州黄金回收行业实力梯队排名 本地闲置黄金靠谱变现完整攻略 - 润富黄金珠宝行
  • 2026清河县黄金回收白银回收铂金回收店铺实力排行榜TOP5;K金+金条+银条+首饰回收靠谱门店及联系方式推荐 - 前途无量YY
  • 天津“机器人军团”集体冲刺 IPO,百年工业重镇凭硬核科技迈向智能时代新高峰
  • 智能数据上下文层:让AI代理真正理解您的企业数据价值
  • 成都黄金回收哪家强 长悦高价回收让您省心又安心 优选长悦 - 专业黄金回收
  • 3分钟掌握Unity游戏AI自动翻译:XUnity.AutoTranslator终极指南
  • 3步解决BT下载慢:trackerslist完整配置指南
  • Applite:让macOS软件管理变得简单高效的终极图形化方案
  • 当AI 算力进入锁仓时代,AI 就不再只是软件生意!
  • 智能批改工具的效能比较与专业引领——基于“题小小”与通用大模型的作文教学实证分析 - 博客万