类型成员函数的模板类型推导

时间:2017-05-22 18:35:34

标签: c++

我现在花了几个小时寻找解决方案 问题: 我的编译器一直抱怨缺少模板参数列表, 很明显,它无法从参数本身推断出模板类型。

以下是代码:

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;
}

有什么建议吗?

0 个答案:

没有答案