Чистые виртуальные функции и неиспользуемые аргументы в дочерних функциях в C++

У меня есть следующее:

class Parent {
public:
    virtual bool foo(vector<string> arg1, vector<string> arg2) = 0;
};

class Child : public Parent {
public:
    bool foo(vector<string> arg1, vector<string> arg2);
};

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) {
    return false;
}

Родительская реализация foo(...) не существует, потому что это чисто виртуальная функция. Родитель говорит, что foo принимает два векторных аргумента. Ребенок реализует это правильно с двумя строковыми аргументами, но они не используются. ОДНАКО, некоторые дети Родителя БУДУТ использовать эти аргументы, поэтому они должны быть всегда рядом.

Могу ли я использовать перегрузку, чтобы позволить foo в данном классе Child не иметь аргументов, даже если родитель говорит, что должен?

Большое спасибо.

1 ответ

Решение

Не указывайте имена параметров:

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string>, vector<string>) {
    return false;
}

Это должно решить предупреждения.

Если ваш компилятор по какой-либо причине не поддерживает его - сделайте это:

// arg1 and arg2 not used - GIVES WARNING
bool Child::foo(vector<string> arg1, vector<string> arg2) {
    (void)arg1; (void)arg2; // ignore parameters without "unused" warning
    return false;
}
Другие вопросы по тегам