use*_*257 2 c++ move move-semantics c++11
例如,我有一个可以处理const T &和T &&值的函数:
template <typename T>
/* ... */ foo(const T &) {
std::cout << "const T & as arg" << std::endl;
}
template <typename T>
/* ... */ foo(T &&) {
std::cout << "T && as arg" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以编写单个函数,自动处理这两种类型?如:
template <typename T>
/* ... */ bar(T t) {
foo(t);
}
Run Code Online (Sandbox Code Playgroud)
以便:
T a;
bar(a); // Handles as const T &
T b;
bar(std::move(b)); // Handles as T &&
Run Code Online (Sandbox Code Playgroud)
谢谢!
您可以使用参考崩溃,std::forward到转发的参数传递给foo函数:
template <typename T>
/* ... */ bar(T&& t) {
foo(std::forward<T>(t));
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的foo函数将接受rvalues,常量左值和非常量左值.举个例子,给出:
const int x = 456;
int y = 123;
Run Code Online (Sandbox Code Playgroud)
然后:
foo(123); // foo(T&&)
foo(x); // foo(const T&)
foo(y); // foo(T&&)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |