我现在花了几个小时寻找解决方案 问题: 我的编译器一直抱怨缺少模板参数列表, 很明显,它无法从参数本身推断出模板类型。
以下是代码:
template <typename T> class SafeCallback {
public:
SafeCallback(std::shared_ptr<T> shared, void (T::*mf)())
: weak_(shared), mf_(mf) {}
void Call() {
if (auto shared = weak_.lock()) {
(shared.get()->*mf_)();
}
}
private:
std::weak_ptr<T> weak_;
void (T::*mf_)();
};
class A {
public:
void do_something() {
int i = 0;
i++;
return;
}
};
int main() {
std::shared_ptr<A> a_ptr = std::make_shared<A>();
SafeCallback<A>(a_ptr, &A::do_something).Call(); // ok
SafeCallback(a_ptr, &A::do_something).Call(); // error
return 0;
}
有什么建议吗?