У меня есть класс (выступающий в качестве оболочки над библиотекой) с функциями-членами, которые следуют этому шаблону:
MyObject& MyObject::ObjectFunction(int arg1, std::string arg2)
{
LibraryObject destination_object;
libraryFunction(destination_object, arg1, arg2);
setProp(destination_object);
~destination_object;
return *this;
}
Я хотел бы реорганизовать это так, чтобы повторяющиеся шаги (создание целевого объекта, установка свойства, уничтожение целевого объекта, обратный адрес) могли быть перемещены в собственную функцию, в идеале что-то вроде этого:
MyObject& MyObject::genericFunction (uniqueLibraryFunction(Args))
{
LibraryObject destination_object;
uniqueLibraryFunction(Args);
setProp(destination_object);
~destination_object;
return *this;
}
void libraryFunction1(int arg1, std::string arg2)
{
genericFunction(libraryFunction1(arg1, arg2));
}
void libraryFunction2(double arg1, int arg2)
{
genericFunction(libraryFunction2(arg1, arg2));
}
Однако я использую библиотеку, в которой есть методы, которые требуют, чтобы целевой объект возвращал значения. Я пытался использовать переменные аргументы, но я не могу заставить его работать, так как библиотечные функции принимают разные длины и типы аргументов. Я также пытался использовать указатель на функцию-член, но не смог заставить его работать по той же причине (длина и типы аргументов различаются в зависимости от библиотечных функций).
Мой код класса следующий:
class MyObject
{
private:
LibraryObject prop;
public:
getProp();
setProp(int prop);
}