C++ / CLI: Реализация IList и IList <T> (явная реализация индексатора по умолчанию)

Вы можете использовать функцию setTimeout для объекта ответа. Рассмотрим простой пример:

const http = require('http');
const port = 3000;

const requestHandler = (req, res) => {
    res.setTimeout(Math.random() * 2500, () => {
        res.writeHead(408);
        res.end();
    });
    setTimeout(() => {
        if (res.headersSent) {
            return;
        }
        res.writeHead(200);
        res.write('OK');
        res.end();
    }, 2000);
};

const server = http.createServer(requestHandler);

server.listen(port, (err) => {
    if (err) {
        return console.log('an error happened', err)
    }
    console.log(`server is listening on ${port}`)
});

Если вы позвоните localhost:3000 в своем веб-браузере, вы увидите либо 200 OK, либо ошибку 408. Обратите внимание, что вам нужно обработать уже отправленные заголовки, если случайный тайм-аут был менее 2000 мс.

5
задан Rasmus Faber 27 March 2009 в 13:16
поделиться

3 ответа

Ответ JaredPar почти работал. Должны быть изменены две вещи:

  • Свойству индексатора нужно другое имя, так как "значение по умолчанию" уже взято неявной реализацией.
  • Спецификация переопределяющих потребностей, которые будут сделаны на съемочной площадке и получать-методы, не на самом свойстве.

Т.е.:

  property Object^ IListItems[int]{
    virtual Object^ get(int index) = System::Collections::IList::default::get;
    virtual void set(int index, Object^ item)  = System::Collections::IList::default::set;
  }
5
ответ дан 14 December 2019 в 09:01
поделиться

Не сделали большого количества интерфейсов в C++ / CLI, но это, кажется, покрыто 8.8.10.1 из C++ / СПЕЦИФИКАЦИЯ CLI. Я верю функции, которую Вы ищете, явное переопределение. В этом необходимо указать реализованного участника после определения как так.

property Object^ default[int] = System::Collections::IList::default {... }
2
ответ дан 14 December 2019 в 09:01
поделиться

Я скомпилировал реализацию класса IList<T> явно записанный в C# и открытый это с Отражателем и демонтированный к C++ / CLI.

T System::Collections::Generic::IList<T>::get_Item(Int32 __gc* index)
{
   //
}

void __gc* System::Collections::Generic::IList<T>::set_Item(Int32 __gc* index, T value)
{
   //
}

Но это не компилирует: get_Item, set_Item не член IList<T>;

0
ответ дан 14 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: