В C ++ методы могут иметь необязательные аргументы, например:
void myFunction (int arg1, int arg2=0);
В этом случае myFunction может вызываться с 1 целым или двумя.Если вы опустите второе целое число, вместо него будет передано значение 0.
Сейчас я ищу способы получить ту же функциональность, но со стороны вызываемого.Предположим, у меня есть интерфейс, который мне нужно внедрить (например, интерфейс наблюдателя).На данный момент это выглядит так:
class IObserver
{
public:
virtual bool operator() (OtherClass *instance) = 0;
};
До сих пор код, вызывающий наблюдателей, только хотел передать аргумент экземпляра.Но чтобы реализовать некоторые новые функциональные возможности, я хочу добавить некоторые другие аргументы, например:
class IObserver
{
public:
virtual bool operator() (OtherClass *instance, int firstOptional, int secondOptional) = 0;
};
Но, учитывая, что эти новые аргументы имеют смысл только для небольшого числа очень специфических наблюдателей, яне хочу добавлять дополнительные аргументы к остальным 99% наблюдателей.
Чтобы сделать ситуацию более сложной, код, который вы предоставляете наблюдателю, также принимает лямбда-выражение.Таким образом, вы могли бы написать что-то вроде этого:
addObserver (observee, [](OtherClass *instance)->bool {/*do something here*/ return true;}
Простота оригинальной подписи позволила легко и просто передать лямбда-выражение.С дополнительными аргументами я теперь вынужден добавить эти аргументы в лямбда-выражения, даже если они не имеют смысла для этого наблюдателя.
Я знаю, что проблему можно решить, введя дополнительный адаптер, но яЯ на самом деле ищу способ получить реальные необязательные аргументы со стороны вызывающего абонента.
Какие-либо предложения о том, как решить это простым, но простым способом?