Как прекратить (или вернуть) автоматическую функцию с типом структуры во время выполнения? - PullRequest
6 голосов
/ 21 июня 2019

Как завершить функцию «auto» с типом, возвращающим структуру во время выполнения?

Я хочу выйти из функции auto 'Func' (не для всей программы), когда выполняется какое-либо условие, как указано ниже:

#include "stdafx.h"
#include <vector>
#include <tchar.h>
#include <iostream>

using namespace std;

auto Func(int B, vector<int> A) {
    for (int a = 0; a < B; a++)
    {
        A.push_back(a);
        if (a == 2)
        {
            cout << " Terminate Func! " << endl;
            // return; I want to terminate 'Func' at this point  
        }
    }

    struct result { vector <int> A; int B; };
    return result{ A, B };
}

int _tmain(int argc, _TCHAR* argv[])
{

    vector<int> A;
    int B = 5;

    auto result = Func(B, A);
    A = result.A;
    B = result.B;

    for (int a = 0; a < A.size(); a++)
    {
        cout << A[a] << endl;
    }
}

Я не хочу использовать «exit ()», потому что я просто хочу завершить функцию, а не программу.

1 Ответ

7 голосов
/ 21 июня 2019

Вы можете вернуть определение типа возврата result в верхней части функции, а затем вернуть «пустой» экземпляр, например:

auto Func(int B, vector<int> A) {
    struct result { vector <int> A; int B; };

    for (int a = 0; a < B; a++)
    {
        A.push_back(a);
        if (a == 2)
        {
            return result{{}, 0};
        }
    }

    return result{ A, B };
}

Если вы не хотите, чтобы действительный объект возвращался при выполнении условия раннего возврата, рассмотрите возможность возврата std::optional<result> из функции и, в частности, std::nullopt в ветви раннего возврата. Но для этого требуется C ++ 17.

...