繁体   English   中英

C ++ 11:函数模板:通过引用传递参数

[英]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& argT被推导为int因为参数x类型为int

在第二个参数func_t<T>T被推导为int&因为参数func2类型为void(int&)

由于两个推导类型( intint& )对于同一参数不同,因此推导失败。

但是,您可以通过明确指定T应该是int&来做正确的事情:

func<int&>(x, func2); // ok

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM