virtual void myFunc(int& a, int& b) {}
Я получаю предупреждения о неиспользуемых переменных, но я не хочу ничего делать с ними в базовом классе.
Я хочу, чтобы производные классы реализовывали их, если они хотят, и ничего не делали, если они их не реализовывали. Что я могу сделать, чтобы остановить предупреждения, кроме установки флага на компилятор?
Просто не дайте им имя:
virtual void myFunc( int&, int& );
Поскольку вы не хотите их использовать, вы можете выдавать имена параметров.
Однако вместо того, чтобы удалять их полностью, иногда бывает полезно закомментировать их так:
virtual void myFunc(int& /* a */ , int& /* b */ )
{
}
Таким образом, вы все еще можете увидеть, каково было назначение параметра, посмотрев на закомментированное имя. Это особенно полезно, если вы поместите реализацию в заголовок, так как это будет единственное место, где упоминаются имена параметров.
У вас есть несколько способов замолчать это предупреждение
Удалить их из объявления / определения:
virtual void myFunc(int& /* a */ , int& /* b */ ) {}
Это решение может вызвать некоторые предупреждения с помощью некоторого инструмента, как Doxygen …
Используйте трюк, чтобы сказать, что аргумент не используется:
template <typename T> void unusedArg(const T&) {} // Helper function.
// In the class
virtual void myFunc(int& a, int& b) { unusedArg(a); unusedArg(b); }
или в C ++ 11:
template <typename ... Ts> void unusedArgs(const Ts...&) {} // Helper function.
// In the class
virtual void myFunc(int& a, int& b) { unusedArgs(a, b); } // C++11
В C ++ 17 вы также можете использовать атрибут [[maybe_unused]]
:
// In the class
virtual void myFunc([[maybe_unused]] int& a, [maybe_unused]] int& b) {}
Попробуйте определить функцию без имен параметров как
virtual void myFunc(int& ,int& )
{
}
Также рассмотрите возможность сделать базовый класс абстрактным.
virtual void myFunc(int& a,int& b ) = 0;
если это просто приукрашивает интерфейс.
В некоторых компиляторах вы можете просто написать имя переменной как оператор «no-op».
virtual void myFunc(int& a, int& b)
{
a; // unused variable
b;
}
Однако, чтобы поддержать другие компиляторы и прояснить намерение, вы можете использовать макрос или функцию unused_argument
чтобы было понятно.
Если это не работает с вашим компилятором, я думаю, что делать sizeof(a);
будет работать.