[英]C++11: function template: passing parameters by reference
有一种模板函数可以通过引用+回调函数传递一个参数,但如果通过引用回调函数传递参数然后编译器抛出错误就会出现问题:
没有用于调用
func(int&, void (&)(int&))
匹配函数func(int&, void (&)(int&))
。
怎么了?
template<typename T>
using func_t = void(T);
template<typename T>
void func(T& arg, func_t<T> callback) {
callback(arg);
}
void func1(int arg) { }
void func2(int& arg) { } //<-- (1)
int main() {
int x = 0;
func(x, func1);
func(x, func2); //<-- (2) compilation error
}
扣除T
因为在第二呼叫失败T
其中推断的不同值的两个推测的上下文发生T
。
在第一个参数T& arg
, T
被推导为int
因为参数x
类型为int
。
在第二个参数func_t<T>
, T
被推导为int&
因为参数func2
类型为void(int&)
。
由于两个推导类型( int
和int&
)对于同一参数不同,因此推导失败。
但是,您可以通过明确指定T
应该是int&
来做正确的事情:
func<int&>(x, func2); // ok
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.