Функторы + указатели на элементы для создания объекта сигнала
У меня есть этот код:
// signal supporter parent
class signalable {};
template <class typeT = signalable>
typedef void (typeT::*trig)(std::string);
template <class typeT = signalable>
class trigger
{
private:
typeT* instance;
typeT::trig fun;
public:
trigger(typeT* inst, typeT::trig function)
: instance(inst), fun(function)
{}
void operator ()(std::string param)
{
(instance->*fun)(param);
}
};
И я получаю много ошибок компиляции, о которых, я уверен, профессионалы знают. Я просто немного запутался в этом контексте.
То, что я хочу сделать, ясно: передать указатель на объект и указатель на одну из его функций-членов, чтобы создать функтор и передать его в моей программе.
Буду признателен за вашу помощь и "исправления".
Спасибо!
1 ответ
Решение
Вы пытаетесь сделать что-то подобное?
#include <string>
#include <iostream>
// signal supporter parent
class signalable
{
public:
void foo(std::string s) { std::cout << "hello: " << s << std::endl; }
};
template <class typeT = signalable>
class trigger
{
typedef void (typeT::*trig)(std::string);
private:
typeT* instance;
trig fun;
public:
trigger(typeT* inst, trig function)
: instance(inst), fun(function)
{}
void operator ()(std::string param)
{
(instance->*fun)(param);
}
};
int main()
{
signalable s;
trigger<> t(&s, &signalable::foo);
t("world");
}
Что касается некоторых из более конкретных ошибок в вашем коде, большинство из них, похоже, связаны с вашим typedef. C++11 допускает "определение типа шаблона", но они не выглядят так. Посмотрите в этой теме пример шаблона typedefs: