У меня есть вопрос о реализации интерфейса в C++:реализация интерфейса с дополнительными аргументами по умолчанию?
Предположим, есть интерфейс:
class A
{
virtual void f() = 0;
};
При реализации этого, я задаюсь вопросом, есть ли способ сделать что-то вроде:
class B : public A {
void f(int arg=0) {....} // unfortunately it does not implement f() this way
};
Я хочу сохранить чистоту. Когда клиентский код вызывает через открытый интерфейс A, arg всегда устанавливается в 0 автоматически. Однако, когда я называю это через B, у меня есть гибкость, чтобы называть его с помощью arg, установленного на другое значение. Это достижимо?
EDIT: Поскольку я контролирую интерфейс и реализацию, я открыт для любых предложений, макросов, шаблонов, функторов или чего-либо еще, что имеет смысл. Я просто хочу иметь минимальную и чистую базу кода. Класс большой, и я не хочу писать код, который не является абсолютно необходимым - например. другая функция, которая просто переходит к фактической реализации.
EDIT2: Просто хочу немного разъяснить: публичный интерфейс предоставляется клиенту. Он более ограничительный, чем интерфейс класса B, который используется только внутренне. Однако функция f() по существу делает то же самое, кроме незначительного различного лечения, основанное на входном аргументе. Реальный класс имеет довольно некоторые интерфейсные функции, а подпись сложна. Выполнение пересылки функций быстро приводит к утомительному повторению кода, и оно загрязняет внутренний интерфейс для B. Интересно, как лучше всего справиться с этим в C++.
Спасибо!
Да, это сработает. Однако это большой класс, и, фактически, я должен добавить много пересылающих членов в B, что делает его очень загроможденным. Я стараюсь избегать этого. – ttrrxx
@ttrrxx: вы не можете переопределить функцию с помощью функции, которая, к сожалению, принимает разные аргументы. Это включает функции аргументов по умолчанию. Если это касается вас, вы можете написать макрос, чтобы написать для вас участников пересылки. – nneonneo
спасибо .. Поскольку я контролирую интерфейс и реализацию, я открыт для любых предложений, макросов, шаблонов, функторов или чего-то еще, что имеет смысл. Я просто хочу иметь минимальную и чистую базу кода. Надеюсь, это будет творческий способ сделать это. – ttrrxx