В конечном счете, myVector.array
относится к переменной массива в классе, и переменные не нуждаются в обозначении вызова функции ()
.
BTW / все заглавные идентификаторы должны использоваться только для макросов препроцессора (как они здесь). В этом случае необходимо использовать макрос VMMLIB_ALIGN
, чтобы упростить последующее «расширение» кода, сгенерированного для переменной array
и рядом с ней (например, добавив к ней префикс static, extern, const, volatile или что-то специфичное для компилятора ) и / или добавление некоторых связанных функций, таких как функции get / set / search / clear / serialise, которые работают с массивом.
В общем - когда вы не уверены в том, что делает макрос, вы можете лучше понять, запустив компилятор с ключом командной строки, запрашивающим вывод препроцессора (в GNU g ++ этот переключатель равен -E
) .. ... тогда вы сможете увидеть фактический исходный код, с которым правильно работает компилятор C ++.
РЕДАКТИРОВАТЬ - мало комментариев по поводу вашего комментария, но слишком долго, чтобы включать в мой собственный комментарий ...
Классы C ++ являются закрытыми, пока не будет предоставлен другой спецификатор доступа (но на практике общедоступный интерфейс - обычно ставится на первое место, поэтому программист все равно должен помнить об использовании private
). структуры являются общедоступными по умолчанию. Таким образом, данные эффективно отображаются по умолчанию в наиболее распространенном стиле кодирования. И ему не нужна семантика функциональных вызовов для доступа к ней. Objective-C может быть лучше в этом ... ваш комментарий подразумевает, что вы используете функциональную запись вызовов для членов данных и функций, которая по умолчанию скрыта? Это так хорошо иметь общие обозначения! В C ++ сложный случай, когда у вас есть что-то вроде ...
struct Point
{
double x, y;
};
...
// client usage:
this_point.x += 3 - that_point.y;
... затем хотите изменить на ...
struct Point
{
double angle, distance;
};
... вам понадобятся довольно причудливые и подробные, закодированные вручную и не очень эффективные прокси-объекты x и y, чтобы старый клиентский код оставался неизменным, вычисляя x и y на лету, а также обновляя угол и расстояние по мере необходимости. Унифицированная нотация замечательна - она позволяет варьировать реализацию без изменений исходного кода клиента (хотя клиенты должны будут перекомпилировать).