如何调用pass template member方法作为参数

时间:2015-08-03 02:33:53

标签: c++ c++11

例如,install<double>(&T::print);无法通过编译。我如何将T::print作为参数传递?删除template <typename M>可以通过编译。但我无法删除template <typename M>,因为我需要真正的代码。提前谢谢。

#include <iostream>

template<typename T>
class Base
{
public:
  template <typename M>
  void install(void (T::*method)(int))
  {
    std::cout << "Hello" << std::endl;
  }
};

template<typename T>
class Child : public Base<T>
{
public:
  void test()
  {
    install<double>(
        &T::print);
  }
};

class Grandson : public Child<Grandson>
{
public:
  void print(int n)
  {
    std::cout << "Num:" << n << std::endl;
  }
};

1 个答案:

答案 0 :(得分:2)

你必须致电

this->template install<double>(&T::print);

Live Demo