Инициализировать ссылку на HINSTANCE внутри конструктора

У меня есть класс, и я хочу сделать его глобальным объектом (у меня есть веская причина для этого), но для этого мне нужно инициализировать все элементы (если нет, я получаю C2512 Нет конструктора по умолчанию), что является проблемой, потому что Я использую ссылку на HINSTANCE, которую мне тоже нужно инициализировать, и я не знаю, что мне делать. Вот код:

class Foo {
private:
//Class data
HINSTANCE hInstance;
public:
Foo(HINSTANCE & hInstance = ??, std::string name = "Default");
};

Foo foo;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
foo = Foo(hInstance, "SomeName");
}

Любая идея, как я могу это сделать? Спасибо!

-2

Решение

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

class Foo
{
private:
//Class data
HINSTANCE hInstance;
public:
Foo(HINSTANCE hInstance = NULL, const std::string &name = "Default");
};

Foo::Foo(HINSTANCE hInstance, const std::string &name)
: hInstance(hInstance)
{
//...
}

Тогда вы можете сделать это:

Foo foo;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
foo = Foo(hInstance, "SomeName");
//...
}

В качестве альтернативы:

#include <memory>

std::unique_ptr<Foo> foo; // or std::auto_ptr before C++11

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
foo.reset(new Foo(hInstance, "SomeName"));

// or, in C++14 and later...
// foo = std::make_unique<Foo>(hInstance, "SomeName");

//...
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]