我有这段代码:
// 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);
}
};
我得到很多编译错误,我打赌专业人士知道。我只是对这个背景感到困惑。
我想要做的是明确:将指针传递给一个对象,并指向其中一个成员函数,以制作一个仿函数并将其传递给我的程序。
感谢您的帮助和“更正”。
谢谢!
答案 0 :(得分:0)
#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允许“模板类型定义”,但它们看起来不像那样。看一下这个线程的模板typedef的例子: