LINUX.ORG.RU

История изменений

Исправление Lrrr, (текущая версия) :

Задача: обернуть эту функцию в другую функцию, принимающую в себя тип переменной и саму переменную.

В Си это делается с помощью tagged union, примерно так:

struct v {
  union {
    int i;
    long j;
  };
  int type;
} v1;

void my_function (v1 *data) {
  if (data->type == TYPE_INT) {
    dbus_message_append_args(connection, type, data->i, DBUS_TYPE_INT);         
  } else if (data->type == TYPE_LONG) {
    dbus_message_append_args(connection, type, data->j, DBUS_TYPE_LONG);
  }
}

либо, если тег у тебя уже есть, то простой union.

Исправление Lrrr, :

Задача: обернуть эту функцию в другую функцию, принимающую в себя тип переменной и саму переменную.

В Си это делается с помощью tagged union, примерно так:

struct v {
  union {
    int i;
    long j;
  };
  int type;
} v1;

void function my_function (v1 *data) {
  if (data->type == TYPE_INT) {
    dbus_message_append_args(connection, type, data->i, DBUS_TYPE_INT);         
  } else if (data->type == TYPE_LONG) {
    dbus_message_append_args(connection, type, data->j, DBUS_TYPE_LONG);
  }
}

либо, если тег у тебя уже есть, то простой union.

Исправление Lrrr, :

Задача: обернуть эту функцию в другую функцию, принимающую в себя тип переменной и саму переменную.

В Си это делается с помощью tagged union, примерно так:

struct v {
  union {
    int i;
    long j;
  };
  int type;
} v1;

void function my_function (v1 *data) {
  if (data->type == TYPE_INT) {
    dbus_message_append_args(connection, type, data->i, DBUS_TYPE_INT);         
  } else if (data->type == TYPE_LONG) {
    dbus_message_append_args(connection, type, data->j, DBUS_TYPE_LONG);
  }
}

Исходная версия Lrrr, :

Задача: обернуть эту функцию в другую функцию, принимающую в себя тип переменной и саму переменную.

В Си это делается с помощью tagged union, примерно так:

struct v {
  union {
    int i;
    long j;
  };
  int type;
} v1;

void function my_function (int type, v1 *data) {
  if (data->type == TYPE_INT) {
    dbus_message_append_args(connection, type, data->i, DBUS_TYPE_INT);         
  } else if (data->type == TYPE_LONG) {
    dbus_message_append_args(connection, type, data->j, DBUS_TYPE_LONG);
  }
}