Как определить и объявить структуру, когда конструктор используется для аргумента по умолчанию? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть файл .h. У меня есть функция, которая использует конструктор Struct / Class для аргумента по умолчанию.

Появляется в конце объявления, как здесь ответили: Куда поместить значение параметра по умолчанию в C ++?

Объявление функции

vector<UINT_PTR> scan(const ScanOptions& scan_options = ScanOptions());

Определение структуры

struct ScanOptions {

ScanOptions()
{
    //Use some Windows.h functions here to find values
    SYSTEM_INFO sysinfo;
    GetSystemInfo(&sysinfo);
    start_address = sysinfo.lpMinimumApplicationAddress;
    end_address = sysinfo.lpMaximumApplicationAddress;

}

UINT_PTR start_address;
UINT_PTR end_address;
};

Здесь ответили, что:

Частные структуры для этого файла должны находиться в файле .c с объявлением в файле .h, если они используютсякакие-либо функции в .h.

Должны ли определения структуры находиться в файле .h или .c?

Кажется, нет способа объявитьтолько для того, чтобы объявить об этом?

C ++, как объявить структуру в заголовочном файле

Так что я просто храню объявление и определение своей структуры внутри моегоheader или есть другой рекомендуемый способ?

Я имею в виду, что мне все равно, насколько он глобален, так как он работает, и я не думаю, что он приведет к проблемам, но я действительно хочу знать.

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы используете

vector<UINT_PTR> scan(const ScanOptions& scan_options = ScanOptions());

в файле .h, тогда определение ScanOptions должно быть видно в точке объявления функции.

Однако вместо использования аргумента по умолчанию вы можете перегрузить функцию.

vector<UINT_PTR> scan();
vector<UINT_PTR> scan(const ScanOptions& scan_options);

при том понимании, что первая функция будет использовать построенную по умолчанию ScanOptions для своей работы.С этим изменением вы можете перенаправить объявление ScanOptions в файл .h и определить его только в файле .cpp.

Следующее является абсолютно допустимым и не требует определения ScanOptions в.h файл.

struct ScanOptions;

vector<UINT_PTR> scan();
vector<UINT_PTR> scan(const ScanOptions& scan_options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...