【发布时间】:2014-05-20 13:05:39
【问题描述】:
我试图在一个类似闭包的对象中捕获传递给函数的参数。主要目标是捕获(存储引用而不是副本)任何类型的参数。 (这里是why。)
这是一个非常简化的版本,它只捕获 2 个参数并将它们存储在一对中:
template<typename T1, typename T2>
void foo(T1&& t1, T2&& t2)
{
pair<T1&&, T2&&> p(forward(t1), forward(t2)); // Capture parameters -- doesn't work
cout << p.first << "," << p.second << endl;
}
int main()
{
string s = "hey";
foo("hello", "world");
foo(1, 2);
foo(s, endl);
return 0;
}
不幸的是,这不能用 g++ 4.7.2 编译:
main.cpp: In instantiation of 'void foo(T1&&, T2&&) [with T1 = basic_string<char>&; T2 = basic_string<char>&]':
main.cpp: error: no matching function for call to 'forward(basic_string<char>&)'
...
如何声明和初始化 p 以使上述编译?
【问题讨论】:
标签: c++ c++11 rvalue-reference