gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:51 26 4
gpt4 key购买 nike

有一种模板函数通过引用传递参数+回调函数,但是如果参数通过引用传递给回调函数则编译器会抛出错误:

no matching function for call to 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&) .

由于两个推导类型,intint& , 相同参数不同,推导失败。

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

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

关于C++11:函数模板:通过引用传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com