Я пытаюсь использовать указатели функций в конструкторе класса, чтобы я мог выбрать, какая функция используется для построения объекта класса. Я хочу сделать это, чтобы изменить способ определения переменных-членов в классе с помощью одного и того же набора аргументов конструктора. Я смог успешно скопировать это, как показано в следующем коде, однако мне нужно объявить все отдельные функции, на которые указывают друзья.Метод конструктора переменных C++ с константными аргументами конструктора
Мой вопрос: есть ли способ объявить функцию с неизвестным именем (т. Е. Только тип возвращаемого значения и набор аргументов известен) как друга? Я хочу это, потому что в будущей разработке могут быть добавлены новые функции, а класс остается тем же, и я не хочу добавлять новое объявление для каждой новой функции.
Конечно, я также открыт для других подходов к достижению моей цели.
#include <iostream>
class foo
{
private:
int var_1;
public:
foo(void (*functionPtr)(foo*))
{
functionPtr(this);
}
~foo(){}
int get_var() {return var_1;}
friend void function_1(foo*); // declare all unique
friend void function_2(foo*); // functions as friends
/*friend void (*functionPtr)(foo*); // this is what I want:
// to declare all functions with
// a specific return type and
// specific arguments as a friend
// of this class */
};
void function_1(foo* T)
{
std::cout << "function 1" << std::endl;
T->var_1 = 1;
}
void function_2(foo* T)
{
std::cout << "function 2" << std::endl;
T->var_1 = 2;
}
int main()
{
foo F1(&function_1);
std::cout << F1.get_var() << std::endl;
foo F2(&function_2);
std::cout << F2.get_var() << std::endl;
return 0;
}
Я слишком стар и ржавый, чтобы рассмотреть это в деталях, но изучать * посетителя * рисунок. – Bathsheba
«Я хочу сделать это, чтобы иметь возможность ...» - нет, ты не сын. То, что вы хотите сделать, четко определяет ваши требования, а затем видит, какая языковая функция правильно моделирует его. –
Как Вирсавия заметила, что вы можете принять образец для этого. Я бы рекомендовал посмотреть на заводскую модель. – teivaz