Я занимаюсь разработкой симулятора для использования в тестовой среде на языке c ++.
В любом случае, тестируемая система предоставляет API-интерфейс RCF, который я широко использую. Проблема в том, что мне разрешено (для моделирования реальной системы) иметь только одного «клиента RCF» для каждого соединения. Это означает, что я должен сделать использование потока клиентов безопасным.
Обычно я бы вызвал метод RCF по имени:
client->methodA(param);
Теперь вместо этого я должен (я думаю) обернуть каждый метод в метод, содержащий вызов мьютекса:
virtual class RCFClientWrapper
{
protected:
boost::mutex mtx;
public:
virtual RCFClientWrapper();
}
class FunctionAClient:RCFClientWrapper
{
private:
boost::shared_ptr<RcfClient<IRCFFunctionA_IDL> > client;
public:
/*....Stuff....*/
void methodA(param)
{
boost::lock_guard<boost::mutex> lock(mtx);
client->methodA(param);
}
}
Прежде всего, есть ли лучший способ сделать это?
Во-вторых, есть ли способ сделать все эти маленькие методы «автоматически»? Вместо того, чтобы делать это для каждого метода? Похоже, много ненужных копий / макарон.
Почему бы вам не рассмотреть возможность использования прокси-класса, который используется для реализации Прокси шаблон в котором объект является интерфейсом или посредником для какого-либо другого объекта.