вывод типа из указателя функции в качестве аргумента шаблона

Я новичок в шаблоне и у меня возникли проблемы с их использованием.
Я публикую код ниже, для которого я не могу кодировать.
Нужна помощь в том, как сделать этот кусок

Мне нужно что-то вроде указателя функции, передаваемого в качестве аргумента шаблона в класс тестера, и экземпляра TClass, передаваемого в качестве параметра конструктору. В конструкторе указатель функции будет использоваться для привязки testFunc к переменной-члену класса tester, которая является указателем на функцию. Затем, пока класс тестера уничтожен, будет вызван 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
}

1

Решение

используя C ++ 11 std::bind:

#include <functional>
#include <iostream>

class Specimen
{
public:
int testFunc(int a, float b)
{
std::cout << "a=" << a << " b=" << b <<std::endl;
return 0;
}
};

int main()
{
Specimen sObj;
auto test = std::bind(&Specimen::testFunc, &sObj, 10, 1.1);
test();
}

Проверить документация.

0

Другие решения

Я смешал std::function а также std::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);
}

Живой код

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector