gpt4 book ai didi

C++ 模板参数推导不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:07:52 25 4
gpt4 key购买 nike

我需要覆盖 boost::signals2::signalboost::function 之间的连接。为此,我创建了以下模板函数:

template<typename T>
void bind(boost::signals2::signal<T> &signal, boost::function<T> function) {
// override code ...
}

我想尽可能简单地使用这个bind。从我在类似问题的帖子中读到的内容来看,模板参数应该从函数参数中推导出来。但在我的例子中,当没有明确的参数时它不起作用。

boost::signals2::signal<void ()> my_signal;

bind<void ()>(my_signal, boost::bind(&A::func, this)); // this works
bind(my_signal, boost::bind(&A::func, this)); // error: no matching function for call

我是不是漏掉了什么?
是否有任何解决方法来避免显式模板参数?

最佳答案

第二个参数类型不是std::function<T> , 但一些绑定(bind)类型,所以编译器无法推断出 T对于第二个函数参数。您需要告诉编译器“您可以在第二个函数参数中找不到 T 的类型”。这可以通过使第二个参数成为非推导上下文来完成。

template<typename T>
void bind(boost::signals2::signal<T> &signal,
typename std::common_type<boost::function<T>>::type function) {
// override code ...
}

关于C++ 模板参数推导不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370242/

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