Является ли этот метод добавления вещей членам класса законно используемым в реальном сценарии работы? Когда я смотрю на это, это не кажется синтаксически правильным и чертовски ненужным. Я просто пытаюсь выяснить, использовал ли я это когда-либо вне школьных классов.
Некоторые возможности C ++ связаны с возможностью операторов перегрузки . Как всегда, с великой силой приходит большая ответственность. Операторы могут быть перегружены, чтобы сделать очевидное, например, никто не будет удивлен кодом, подобным этому
Matrix a{ {1,2},{2,3} };
Matrix c = a + a;
Возможно, вы даже не заметите, что +
здесь пользовательский оператор. C ++ сам по себе не может добавить две матрицы. Недостатком перегрузки операторов является то, что вы можете перегружать их, чтобы делать в основном все, что угодно, а иногда это не так очевидно. Граница между хорошей перегрузкой оператора и той, которая приводит к запутанному коду, тонкая.
Что касается вашего конкретного примера, то это шаблон, который вы также можете найти в другом месте. Eigen - это хорошо известная библиотека алгебры. Пример из их документации:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
Matrix2d a;
a << 1, 2,
3, 4;
MatrixXd b(2,2);
b << 2, 3,
1, 4;
std::cout << "a + b =\n" << a + b << std::endl;
std::cout << "a - b =\n" << a - b << std::endl;
std::cout << "Doing a += b;" << std::endl;
a += b;
std::cout << "Now a =\n" << a << std::endl;
Vector3d v(1,2,3);
Vector3d w(1,0,0);
std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}
Обратите внимание на использование оператора <<
для установки элементов матрицы. Они добавляют некоторый оператор запятой voodoo, но использование оператора <<
довольно похоже на то, что вы должны реализовать.
Является ли этот метод добавления вещей в члены класса законно используемым вещь в реальном сценарии работы?
Да. Использование operator<<
для «вставки» элементов в объект совершенно законно. Вы увидите такое использование перегрузки операторов в различных библиотеках. Если оператор используется таким образом, конечно, это требует надлежащей документации, потому что знание языка C ++ недостаточно, чтобы знать, что на самом деле означает оператор в определенном контексте.