Я bamboozled по указателям функций.Bamboozled указателями функции как аргументы другой функции внутри класса
Вот пример кода:
#include <iostream>
class test
{
inline
void output_plumber_1(int* const arg_out, const int* const arg_in)
{
*arg_out = -*arg_in;
}
inline
void input_plumber_1(int* const arg_out, const int* const arg_in)
{
*arg_out = 2 * (*arg_in);
}
inline
void member_func(void (test::*output_plumber)(int* const arg_out, const int* const arg_in),
void (test::*input_plumber)(int* const arg_out, const int* const arg_in),
int arg)
{
int arg_copy;
(*input_plumber)(&arg_copy, &arg);
arg_copy = arg_copy + 1;
int arg_out;
(*output_plumber)(&arg_out, &arg_copy);
std::cout << arg_out << std::endl;
}
public:
void execute(int arg)
{
void (test::*output_plumber)(int* const arg_out, const int* const arg_in) = &test::output_plumber_1;
void (test::*input_plumber)(int* const arg_out, const int* const arg_in) = &test::input_plumber_1;
member_func(output_plumber, input_plumber, arg);
}
};
int main()
{
test mytest;
mytest.execute(1);
return 0;
}
Что это предполагается делать?
Это довольно скудный пример, но по существу у меня есть программа с классом с функцией-членом, которая работает с некоторыми входными данными. Перед выполнением операции и после выполнения операции данные должны быть поданы в набор входных и выходных функций «сантехник», которые изменяют данные при подготовке к «операции» и «делают что-то для этого, чтобы исправить для первоначальной подготовки «после» операции была проведена ».
Такая вещь возникла в моей программе, так как я работаю с алгоритмами, которые работают с парами данных (x, y), которые работают только при x> y. (Bizarre? Но так оно и есть.)
Что такое проблема?
Предположительно многочисленны, однако непосредственный вывод компилятора заключается в следующем:
main.cpp: In member function ‘void test::member_func(void (test::*)(int*, const int*), void (test::*)(int*, const int*), int)’:
main.cpp:27:11: error: invalid use of unary ‘*’ on pointer to member
(*input_plumber)(&arg_copy, &arg);
^
main.cpp:32:11: error: invalid use of unary ‘*’ on pointer to member
(*output_plumber)(&arg_out, &arg_copy);
Возникает вопрос: «Что делает этот co de do "или" почему этот код не компилируется "? –
@JamesRoot Почему он не компилируется - я сам написал код, я знаю, что, по-моему, хочу, чтобы он это делал, это просто не синтаксически правильно – user3728501
Если функции водопроводчика фактически не используют 'this', было бы лучше сделать их нечленами. Рассмотрим, что 'member_func' принимает' std :: function ', что является гораздо более общим. –