Как инициализировать stati c out-параметров - PullRequest
0 голосов
/ 08 мая 2020

Извините, если это основной c вопрос. По сути, я реализую класс с кучей статических c (и неизменных) ресурсов, которые будут использоваться всеми экземплярами. Ресурсы stati c необходимо инициализировать один раз, передав их в качестве выходных параметров различным функциям. Я не был уверен, как это сделать элегантно. На данный момент я помещаю все необходимые вызовы функций в лямбда-выражение или частную функцию-член, а затем вызываю эту функцию в конструкторе статическим c способом, например:

HRESULT MyClass::FinalConstruct()
{
    static HRESULT hr = []() {

        HRESULT hr;

        // Call necessary initializing functions,
        // passing static variables as out-parameters. For example:
        // (s_pUIA and s_pUIATreeWalker are static smart pointers that
        // need to be initialized)

        hr = CoCreateInstance(  __uuidof(CUIAutomation),
                                NULL,
                                CLSCTX_INPROC_SERVER,
                                IID_PPV_ARGS(&s_pUIA)  );
        if (FAILED(hr))
        {
            ATLTRACE("\nFailed to instantiate IUIAutomation object.\n");
            return hr;
        }

        hr = s_pUIA->get_ControlViewWalker(&s_pUIATreeWalker);
        if (FAILED(hr))
        {
            ATLTRACE("\nFailed to get IUIAutomation tree walker.\n");
            return hr;
        }

        // ...

        return hr;

    }();

    return hr;
}

Я не был уверен, есть ли более приемлемый способ сделать это. Большое спасибо за любой вклад.

...