可选参数向量

时间:2018-11-17 18:36:45

标签: c++

如何制作可选的矢量参数?我读了一些线程以使用指向矢量的指针,但出现以下错误:

 redefinition of default argument: parameter 1

,代码错误C2572。

void EnumerateProcessInformations(std::vector<DWORD> &o_processId, const std::vector<std::wstring> *o_processName = nullptr)
{
    HANDLE hSnapProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    PROCESSENTRY32W process;
    process.dwSize = sizeof(PROCESSENTRY32W);
    Process32FirstW(hSnapProcess, &process);
    do
    {
        if (process.th32ProcessID != 0)
        {
            o_processId.emplace_back(process.th32ProcessID);
            if (*o_processName != nullptr) { *o_processName.emplace_back(process.szExeFile); }
        }
    } while (Process32NextW(hSnapProcess, &process));
    CloseHandle(hSnapProcess);
}

int main()
{
    std::vector<DWORD> processId;
    EnumerateProcessInformations(processId, nullptr);
    for (auto& p : processId)
    {
        std::cout << p << std::endl;
    }
    getchar();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

使用指针有两个问题:

  • 您要先取消引用指针,然后再检查其nullptr。您不是要检查指针是否为空,而是要检查指向的向量是否为空。

  • 您将其声明为指向const vector,这意味着您不能调用向量上的任何变异方法,例如emplace_back

尝试以下方法:

void EnumerateProcessInformations(..., std::vector<std::wstring> *o_processName = nullptr);

...

void EnumerateProcessInformations(..., std::vector<std::wstring> *o_processName)
{
    ...
    if (o_processName) o_processName->emplace_back(process.szExeFile);
    ...
}