Передать параметр в функцию через структуру

Рейтинг: 0Ответов: 2Опубликовано: 17.04.2015

Как можно передать параметр в функцию через структуру? Есть код:

void function(Help h) {
    getF(par, set);
}

void getF(par, set) {
    ///
}

struct Help {
    int par;
    const int set;
}

int main {
    int par = 3;
    const int set = 4;
    function(h);
    return 0;
}

Т.е. в function нужно как-то закинуть set. Но не добавляя его в параметры, т.е. так: void function(int par, int set)

Ответы

▲ 1Принят

читайте комментарии в коде

#include <iostream>

using namespace std;

struct theParameters{ // Создаем новый тип который
    int a;            // мы будем передавать в функцию
    int b;            // в качестве параметров.
};

void PrintParameters(theParameters p){ // Функция будет принимать
    cout << p.a << endl;               // theParameters в качестве
    cout << p.b << endl;               // единого параметра.
}

int main(){
    theParameters parameters; // Cоздали экземпляр.

    parameters.a = 10; // Заполнили
    parameters.b = 13; // значениями.

    PrintParameters(parameters); // Передали как параметер и напечатали значения экземпляра

    return 0;
}
▲ 2

Современный C++ позволяет избежать явного создания вспомогательных структур, единственное предназначение которых состоит в том, чтобы упаковать вместе несколько параметров:

(Осторожно, C++14!)

#include <iostream>
#include <string>
#include <tuple>
#include <utility>

using namespace std;

void func(int one, double two) {
    cout << one << ", " << two << endl;
}

void func(int one, double two, string three) {
    cout << one << ", " << two << ", " << three << endl;
}

void func(int one, string three) {
    cout << one << ", " << three << endl;
}

// Начало шаблонной магии
template <typename... Args, size_t... I>
void func_invoker(tuple<Args&...> args, index_sequence<I...>) {
    func(get<I>(args)...);
}

template <typename... Args>
void func_helper(tuple<Args&...> args) {
    func_invoker(args, index_sequence_for<Args...>{});
}
// Конец шаблонной магии

int main()
{
    int one = 1;
    double two = 2.0;
    string three = "3";

    func_helper(tie(one, two));
    func_helper(tie(one, two, three));
    func_helper(tie(one, three));

    return 0;
}