dimanche 2 août 2015

How to call pass template member method as parameter

For example, install<double>(&T::print); could not pass compile. How could I pass T::print as parameter? Remove template <typename M> could pass compile. But I could not remove template <typename M>, because I need it in the true code. Thank you in advance.

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

Aucun commentaire:

Enregistrer un commentaire