Как я могу назначить значение по умолчанию для структуры в функции C ++? - PullRequest
6 голосов
/ 11 сентября 2010

У меня есть структура:

typedef struct {
   double x,y,z;
} XYZ;

Я хочу определить функцию следующим образом:

double CalcDisparity(XYZ objposition, 
                     XYZ eyeposition, 
                     double InterOccularDistance = 65.0)

Но я не могу найти способ назначить значение по умолчаниюна глаз.Как я могу сделать это в C ++?

Ответы [ 4 ]

11 голосов
/ 11 сентября 2010

Это

struct XYZ{
    XYZ( double _x, double _y, double _z ) : x(_x), y(_y),z(_z){}
    XYZ() : x(0.0), y(42.0), z(0.0){}

    double x, y, z;
};

так что теперь у меня есть конструктор по умолчанию. Тогда вы называете это так:

double CalcDisparity( XYZ objposition = XYZ(),
                      XYZ eyeposition = XYZ(),
                      double interOccularDistance = 65.0 )

Но есть один маленький трюк: вы не можете использовать значение по умолчанию только для 1-го и 3-го аргументов. Еще одна вещь: C - это язык, C ++ - это другой язык.

2 голосов
/ 11 сентября 2010

В C аргументы функции не могут иметь значения по умолчанию (не знаю о C++).

В C вы можете передать (каким-то образом) недопустимое значение,проверьте это неверное значение и используйте другое.

int foo(int n) {
  if (n == -1) { /* -1 is invalid */
    n = 42;      /* use 42 instead */
  }
  /* ... */
}
1 голос
/ 11 сентября 2010
  1. Вы можете написать заводскую функцию для создания объектов XYZ и вызвать функцию в качестве значения по умолчанию.

  2. Вы можете сделать NULL значением по умолчанию, а затем проверить в функции, если аргумент равен NULL, создав XYZ по умолчанию, если он есть.

  3. Создайте глобальный объект XYZ и назначьте его по умолчанию.

  4. Если вы не возражаете против использования C ++ вместо чистого C, сделайте XYZ классом с конструктором.

Это все способы, которые будут компилироваться и работать, но некоторые могут не быть хорошими методами кодирования.

0 голосов
/ 29 октября 2013

Вы можете объединить последнее решение с частью моего решения. Вы реализуете счетчик экземпляров. Если этот счетчик равен 0, вы инициализируете значение. Но счетчик никогда не достигает ничего, кроме 0 ...

Может быть, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...