C++ 模板类重载std::绑定成员函数
有人可以帮助我以正确的方式构建源代码, 我知道我应该将回调声明为C++ 模板类重载std::绑定成员函数,c++,c++11,stdbind,C++,C++11,Stdbind,有人可以帮助我以正确的方式构建源代码, 我知道我应该将回调声明为std::function,因为这不需要复制 可构造参数(std::unique_ptr),那么如果我不使用auto来推断类型,那么正确的类型是什么 #include <functional> #include <memory> template <class T> class SomeClass { void someFunctionCallback(float o) = 0; }; t
std::function
,因为这不需要复制
可构造参数(std::unique_ptr
),那么如果我不使用auto来推断类型,那么正确的类型是什么
#include <functional>
#include <memory>
template <class T>
class SomeClass {
void someFunctionCallback(float o) = 0;
};
template <>
class SomeClass<float> {
public:
SomeClass() = default;
inline void someFunction() {
// std::function<void()>
auto callBack {
std::move(std::bind(&SomeClass<float>::someFunctionCallback,
this,
std::unique_ptr<int>{new int(9)}))};
useCallBack(std::move(callBack));
}
inline void someFunctionCallback(std::unique_ptr<int>&& param) {
}
inline void useCallBack(std::function<void()> &&callBack) {
// callBack();
}
};
int main() {
SomeClass<float> k;
k.someFunction();
return 0;
}
#包括
#包括
模板
上课{
void someFunctionCallback(float o)=0;
};
模板
上课{
公众:
SomeClass()=默认值;
内联函数(){
//std::函数
自动回拨{
std::move(std::bind(&SomeClass::someFunctionCallback),
这
std::unique_ptr{new int(9)}});
useCallBack(std::move(callBack));
}
内联void someFunctionCallback(std::unique_ptr&¶m){
}
内联void useCallBack(std::function&&callBack){
//回调();
}
};
int main(){
k类;
k、 someFunction();
返回0;
}
您的代码有几个问题。首先,auto{…}
将推导出一个std::initializer\u列表
。那不是你想要的。改用大括号或相等的初始值设定项
auto callBack =
std::bind(&SomeClass<float>::someFunctionCallback,
this,
std::unique_ptr<int>{new int(9)});
最后,把你的函数做成一个模板。整个想法不必担心类型,而且auto
始终遵循模板参数推导的规则
template <typename T>
inline void useCallBack(T callBack) {
callBack();
}
模板
内联void useCallBack(T回调){
回调();
}
非常感谢:)我还有其他问题,如果我知道建议使用类型(例如回调),请使用std::initializer\u list({})如果我不担心类型并使用auto,那么我应该使用您之前说的其他方式?
template <typename T>
inline void useCallBack(T callBack) {
callBack();
}