C++ 左右值参数兼容, 让你的函数变得更为易用

这里可以模拟STL中的实现,自己改良了一下,让其可以返回值。

template<class T, class... Args>
T _func(Args&&... args_) {
	T data(std::forward<Args>(args_)...);
	// 逻辑处理...
	return static_cast<T>(data);
}

test& func(test& data_) {
	return _func<test&>(data_);
}

test func(test&& data_) {
	return _func<test&&>(std::move(data_));
}

这样我们不论传递左值还是右值我们的程序都能正常处理,也可以避免下面的情况

test a;
func(a);
// 可以替换为
test a(func(test()));	// 调用顺序为: 构造 -> 移动构造 -> 析构
如果不需要返回值可以去掉。

版权声明:本文为qq_28398301原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。