Если не по какой-либо другой причине, кроме как для собственного развлечения, я хочу написать глобальный оператор вставки, чтобы я мог использовать причудливый код:
aQMenu << aQAction1 << aQAction2 << aQAction2 << seperator << aQAction3;
Возможно, вы ненавидите синтаксис, но я бы хотя бы попробовал его использовать. Проблема в том, что я впервые пытаюсь написать код оператора вставки, и я в тупике. Код для вставки enum «seperator» в QMenu * прост, и у меня это работает, но я думал, что этот код будет работать для вставки QAction * в QMenu *:
// does not compile: "must have an argument of class or enumerated type"
QMenu *operator<< (QMenu *menu, QAction *action)
{
menu->addAction(action);
return menu;
}
Компилятор жалуется на то, что эта функция нуждается в аргументе класса или перечислимого типа, что смущает меня, потому что второй параметр имеет тип класса. Я попытался перефразировать эту функцию с помощью амперсанда, но я не обращал способ записать это правильно. Я много смотрел на веб-примеры и подумал, что пришло время ответить на этот вопрос.
Я знаю, что некоторые программисты будут жаловаться на то, что я отклоняюсь от стандартного синтаксиса Qt, но я получаю удовольствие от перегрузки оператора << и другими классами. Просто кажется, что оператор вставки прекрасно работает здесь. Что я могу сказать - это делает меня счастливым. </p>