#include <iostream>
#include <functional>

using namespace std;

class Me {};

using TGetter   = std::function<std::string( Me* )>;

std::string getter( Me* me )
{
  return std::string( "string" );
}

    template<typename TGetter>
    class Handler
    {

    public:
      using TValue =  typename TGetter::result_type;
      Handler( TGetter getter ) :m_getter( getter ) {}
      TValue get()
      {
        Me m;
        return m_getter( &m );
      }

    private:
      TGetter m_getter;
    };

    int main()
    {
      using MyHanlder = Handler<TGetter>;
      MyHanlder h(getter);
      MyHanlder::TValue s = h.get();
      cout << s;
    }