Чистые виртуальные функции и неиспользуемые аргументы в дочерних функциях в 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;
}