язык без «если»?

Коллега сказал, что слышал о языке, в котором нет понятия " ((* (NEWPTR) = new (#TYPE "[" #COUNT "]", __alignof (TYPE), (HEAP), & hr, (ERROR)) TYPE [COUNT]), hr) Это ...

Я просто портирую старый код:

#define NewArrayOnHeap(TYPE, COUNT, HEAP, NEWPTR, ERROR) \
((*(NEWPTR) = new ( #TYPE "[" #COUNT "]", __alignof(TYPE), (HEAP), &hr, (ERROR)) TYPE[COUNT] ), hr)

Похоже, оригинал должен был определять свой собственный магический новый оператор. Мне интересно узнать об этом использовании.

Пример использования

int main()
{
    void*   heap = /* Don't know how to define this */
    double* ptr;
    HRESULT hr;

    hr = NewArrayOnHeap(double, 10, heap, ptr, "Help /* Just guessing here */");
}

Когда я использую g ++ -E для получения вывода препроцессора, это:

int main()
{
    double* ptr;
    HRESULT hr;

    hr = ((*(ptr) = new ( "double[ 10 ]", __alignof(double), (NULL), &hr, ("Help")) double[10] ), hr);
}

Это немного больше похоже на размещение new .

Но является ли это теперь перегруженным новым вызовом (с некоторыми фанковыми параметрами, пятипараметрическим новым вызовом), или запятые здесь являются оператором запятой, и поэтому он сокращается до («Помощь») (что не имеет смысла).

Было ли новым исторически (или даже сейчас) разрешено иметь более двух параметров, (размер, подсказка) ?

Любая помощь по декодированию приветствуется.

5
задан skaffman 14 January 2011 в 03:58
поделиться