У меня есть некоторый код, которому требуется функция C, но я хочу создать экземпляр группы экземпляров и передать функцию-член из этого класса в качестве функции C.Мне нужно захватить N экземпляров одновременно.Я надеюсь, что смогу сделать это как лямбду.
Вот как должна выглядеть (примерно) результирующая функция:
// This is the code I want to interface with:
typedef void func(ParamClass param); // ParamClass is NOT my class
extern void notMyCode1(func funcArg); // Code I want to call, saves funcArg
extern void notMyCode2() // uses saved funcArgs
// Here is the type of class I want to instantiate:
class MyClass {
public:
MyClass(int arg) : saveArg(arg) {}
int saveArg;
void myFunc(ParamClass param) {
// uses saveArg and param to do the right action
}
};
void useCase(void) {
for (int i = 0; i < max; ++i) {
MyClass myInstance(Myclass(i)); // maybe need vector to hold these?
notMyCode1(myInstance.myFunc); // this code is what I don't know how to write
}
notMyCode2();
}
Фон.Библиотека, которую я хочу назвать, - это Google Benchmark.notMyCode1 - это их функция регистрации тестов.notMyCode2 запускает тесты, которые были зарегистрированы.ParamClass - это данные, которые их код передает в бенчмарк.
Теперь обычно передают простую функцию C в код регистрации, по одному на каждый бенчмарк, который он хочет запустить.Однако я хочу запускать один и тот же код снова и снова, параметризуя его по этому номеру «i», и каждый «i» обрабатывается как отдельный тест.Итак, я хочу захватить «i» в классе (или через лямбду, но что-то, что дает мне несколько указателей на функции C со значением «i», связанным в каждом из них).Я попытался сделать «i» параметром для эталонного теста и передать его, но затем код эталонного теста интерпретировал «i» как нечто для суммирования (и я хочу, чтобы каждый «i» рассматривался как уникальный эталонный тест с другим параметром для статистикидля расчета).
Это похоже на то, что должно быть простым делом (это просто замыкание), но я не слишком разбираюсь в указателях функций (или лямбдах C ++).Если бы это был мой код, я бы просто передал экземпляр класса, но это не так.
Я видел примеры использования статических функций в классе, но я специально хочу захватить значение "i "и получить несколько указателей на функции, каждый из которых захватывает различное значение" i ".