function-pointers- все статьи тега


указатель функции против функторов в C++

В чем разница между использованием функторов и указателей функций? Например //Functor struct add_x { int x; add_x(int y):x(y){} int operator()(int y) { return x+y; } }; //Function int (func)(int x) { return ++x; } std::vector<int> vec(); //fill vec with 1 2 3 4 5 int (*f)(int) = func;//Function pointer std::transform(vec.begin(),vec.end(),f); //approach 1 std::transform(vec.begin(),vec.end(),add_x(1)); //approach 2 Оба подхода ра ...

C++ lambda с захватом в качестве указателя функции

Я играл с лямбдами C++ и их неявным преобразованием в указатели функций. Мой начальный пример был использовать их в качестве обратного вызова для функции ftw. Это работает, как и ожидалось. #include <ftw.h> #include <iostream> using namespace std; int main() { auto callback = [](const char *fpath, const struct stat *sb, int typeflag) -> int { cout << fpath << endl; return 0; }; int ret = ftw("/etc", callback, 1); return ret; ...

Какова ближайшая замена указателя функции в Java?

У меня есть метод, который около десяти строк кода. Я хочу создать больше методов, которые делают точно то же самое, за исключением небольшого вычисления, которое изменит одну строку кода. Это идеальное приложение для передачи указателя функции, чтобы заменить эту одну строку, но Java не имеет указателей функций. Какая у меня лучшая альтернатива? ...

"распаковка" кортежа для вызова соответствующего указателя функции

Я пытаюсь хранить в std::tuple различное число значений, которые позже будут использоваться в качестве аргументов для вызова указателя функции, который соответствует сохраненным типам. Я создал упрощенный пример, показывающий проблему, которую я изо всех сил пытаюсь решить: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct sav ...

Функции обратного вызова в C++

В C++, когда и как вы используете функцию обратного вызова? EDIT: Я хотел бы увидеть простой пример для написания функции обратного вызова. ...

C не так уж сложно: void (*(*f[]) ()) ()

Я только что видел фотографию сегодня и думаю, что буду признателен за объяснения. Итак, вот картина: Я нашел это запутанным и задался вопросом, являются ли такие коды когда-либо практичными. Я погуглил картинку и нашел другую картинку в этой reddit запись, и вот что картина: Так это "чтение по спирали" - это что-то действует? Это то, как компиляторы C разбирают? Было бы здорово, если бы были попроще объяснения этого странного кода. Помимо всего прочего, могут ли такие коды быть полезны? Е ...

Функции обратного вызова в Java

есть ли способ передать функцию обратного вызова в методе Java? поведение, которое я пытаюсь имитировать, - это делегат .Net, передаваемый функции. Я видел людей, предлагающих создать отдельный объект, но это кажется излишним, однако я знаю, что иногда излишество-это единственный способ сделать что-то. ...

Использование универсальных объектов std:: function с функциями-членами в одном классе

для одного класса я хочу сохранить некоторые указатели на функции-члены одного класса в одном map хранение std::function объекты. Но я терплю неудачу в самом начале с этим кодом: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function<void(void)> f = &Foo::doSomething; } }; я получил error C2064: term does not evaluate to a function taking 0 arguments на xxcallobj в сочетании с некоторыми странными ош ...

Имеют ли отдельные функции разные адреса?

рассмотрим эти две функции: void foo() {} void bar() {} гарантируется ли, что &foo != &bar? аналогично, template<class T> void foo() { } гарантируется ли, что &foo<int> != &foo<double>? есть два компоновщика, которые я знаю о том, что определения функции сгиба вместе. MSVC агрессивно COMDAT складывает функции, поэтому две функции с одинаковой реализацией могут быть превращены в одну функцию. В качестве побочного эффекта обе функции имеют один и тот же ...