1

我有这个代码:

// 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);
        }
};

而且我得到很多我打赌专业人士都知道的编译错误。我只是对这种情况有点困惑。

我想要做的很清楚:传递指向对象的指针,以及指向其中一个成员函数的指针,以创建一个仿函数并将其传递到我的程序中。

感谢您的帮助和“更正”。

谢谢!

4

1 回答 1

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 允许“模板类型定义”,但它们看起来不像那样。查看此线程以获取模板类型定义的示例:

C++ 模板类型定义

于 2012-04-21T11:24:36.907 回答