1

私はテンプレートを初めて使用し、それらを使用するのに少し問題があります。以下に、コード化できないコードを投稿しています。この作品の作り方に助けが必要

関数ポインターがテンプレート引数としてテスター クラスに渡され、TClass インスタンスがパラメーターとしてコンストラクターに渡されるようなものが必要です。コンストラクターでは、関数ポインターを使用して、関数ポインターであるテスター クラスのメンバー変数に testFunc をバインドします。次に、テスター クラスが破棄されている間に、testFunc が呼び出されます。テンプレートの型推論を解決できません

#include <iostream>

using namespace std;

template< class TClass, TClass::*fptr>
class tester
{

    public:
        tester(TClass & testObj, ...) //... refer to the arguments of the test function which is binded
        {
            //bind the function to member fptr variable
        }

        ~tester()
        {
            //call the function which was binded here
        }

    private:
        (TClass::*fp)(...) fp_t;
};

class Specimen
{
    public:
        int testFunc(int a, float b)
        {
            //do something
            return 0;
        }
}

int main()
{
    typedef int (Specimen::*fptr)(int,float);
    Specimen sObj;

    {
        tester<fptr> myTestObj(sObj, 10 , 1.1);
    }
    return 0
}
4

2 に答える 2

0

私は混合std::functionstd::bindてあなたの問題に近づきました:

template<typename F>
class tester
{
    function<F> func;
public:
    template <typename H, typename... Args>
    tester(H &&f, Args&&... args) : func(bind(f, args...))
    {
    }

    ~tester()
    {
        func();
    }
};

class Specimen
{
public:
    int testFunc(int a, float b)
    {
        return a + b;
    }
};

int main()
{
    Specimen sObj;

    tester<int()> myTestObj(&Specimen::testFunc, &sObj, 10 , 1.1);
}

ライブコード

于 2013-11-12T18:47:50.340 に答える