У меня есть интерфейс с ~ 16 полями ввода.Все они объявлены как открытые указатели внутри класса, инициализированы и т. Д. Однако, так как мой код все больше и больше растет благодаря частным функциям, выполняющим коммитты базы данных, проверку ошибок, процедуры временного хранения и т. Д., Становится очень больно, если поле должноудалить или добавить новый Я должен вникнуть во все эти частные функции и явно удалить / добавить поле;и всегда в отношении порядка полей.
Там имеет , чтобы быть более простым способом!
Это моя идея, и я надеюсь, что любой может ее сбитьили опираться на него:
Моя мысль состоит в том, чтобы хранить указатели на все поля ввода в массиве указателей, а затем все эти частные вспомогательные функции обходят массив;однако некоторые из этих частных функций являются статическими, некоторые не являются статичными;таким образом, требуется больше магии указателя, или я должен иметь две из этих функций массива указателей: одну для использования статических функций и одну для использования нестатических функций?
Чтобы еще больше усложнить ситуацию,Метод, вызываемый для виджетов, варьируется в зависимости от того, что делает частная функция ... Некоторые могут вызывать "-> value (foo)" некоторые могут вызывать "-> location (1), -> location (2)," увеличивая по порядкуиз виджетов.Есть ли способ передать вызванный метод и параметры для этой новой вспомогательной функции, содержащей массив указателей на поля ввода?
Пища для размышлений: Может быть, я пытаюсьслишком увлекаться, избавляя себя от необходимости прокручивать весь код, когда мне нужно что-то изменить?Может быть, это добавит слишком много накладных расходов со всей дополнительной косвенностью указателя?Лучше ли страдать?
Спасибо, любая помощь приветствуется.Если некоторые примеры кода действительно требуются, я могу использовать некоторые из них.
Пример кода (он не компилируется и печатается от руки в качестве примера)
class Foo
{
public:
InputBox * in1;
InputBox * in2;
InputBox * in3;
ExternalDataSource * exds; // Pretend this object you can retrieve values out of
private:
static void clearFieldsFunc1(void * v); // callback bound to a button
static void loadFieldFunc2(void * v); // callback bound to a button
void printFieldsFunc3(); // not a callback, just called from various functions
}
Foo::Foo()
{
in1= new InputBox (0,0,10,10); // Box x,y,w,h
in2= new InputBox (15,0,10,10);
in3= new InputBox (30,0,10,10);
exds = new ExernalDataSource("US Intelligence Agency");
}
// Clears the fields
void Foo::clearFieldsFunc1(void * v)
{
Foo * fptr = ((Foo*)v);
fptr->in1->clear();
fptr->in2->clear();
fptr->in3->clear();
}
// Loads the fields
void Foo::loadFieldFunc2(void * v)
{
Foo * fptr = ((Foo*)v);
fptr->in1->value(fptr->exds->getValue(1));
fptr->in2->value(fptr->exds->getValue(2));
fptr->in3->value(fptr->exds->getValue(3));
}
// Prints the fields
void Foo::printFieldsFunc3()
{
printf("%s\n",this->in1->value());
printf("%s\n",this->in2->value());
printf("%s\n",this->in3->value());
}