Funkcja zwracająca if

0

Cześć, jest jakiś sposób, aby funkcja zwracała warunek if?

Przykład, tego, co chciałbym osiągnąć:

 void Funkcja()
{
    if (a[y][x] == ' ')printw("OK");
}
0

Raczej chodzi Ci o zwracanie wartości bool lub też innej, która zostanie wykorzystana w warunku.

Funkcja może też zwracać cokolwiek, np. inną funkcję.

#include <iostream>
using namespace std;

auto fun(bool x){
    return x?
        []{ cout << "Hello" << endl; }:
        []{ clog << "World" << endl; };
}

int main() {
    fun(0)(), fun(1)();
    return 0;
}

Twój przykład nie mówi nic.

0

Faktycznie, źle to przedstawiłem. Chciałbym aby po wywołaniu funkcji, if zostawał automatycznie wywoływany. Tak jakbym poprzez funkcję, robił 'kopiuj-wklej' w kodzie.

0

Cześć, jest jakiś sposób, aby funkcja zwracała warunek if?

Nie - instrukcje warunkowe się wywołuje, a nie zwraca; Funkcja może zwrócić jakąś wartość, a nie konstrukcję języka;

Chciałbym aby po wywołaniu funkcji, if zostawał automatycznie wywoływany. Tak jakbym poprzez funkcję, robił 'kopiuj-wklej' w kodzie.

Ale co to ma znaczyć? Warunek zawsze wywołany zostanie automatycznie, bez względu na to gdzie i jak go zapiszesz; No i jakie "kopiuj-wklej"? Opisz problem dokładniej, bo raczej nikomu nie będzie się chciało zgadywać; A najlepiej to napisz co potrzebujesz zrobić, a rozwiązanie się dopasuje.

0

Ciężko powiedzieć o co chodzi, ale może chodzić o inlinowe funkcje? Tak, żeby wywolania było wstawiane w kod ciało funkcji?

0

To co napisales nie ma sensu. To brzmi mniej wiecej tak jakbys chcial napisac funkcje liniowa ktora zwraca dodawanie

0

Przepraszam za mało szczegółowy opis. A więc tak, w kodzie często powtarza się:

                    if (a_1[y][x] == ' ')printw(" ");
                    if (a_1[y][x] == 047)printw("'");
                    if (a_1[y][x] == ':')printw(":");
                    if (a_1[y][x] == ';')printw(";");
                    if (a_1[y][x] == ',')printw(",");

Zajmuje to sporo miejsca, ponieważ muszę opisywać każdą tablicę po kolei (zmieniają się tylko ich nazwy), doszedłem do wniosku, czy nie byłoby możliwe napisanie funkcji 'wklejającej' ww. fragment kodu, a jako argument funkcji użyć nazwę tablicy.

kaczus napisał(a):

Ciężko powiedzieć o co chodzi, ale może chodzić o inlinowe funkcje? Tak, żeby wywolania było wstawiane w kod ciało funkcji?

Tak, można powiedzieć że chodzi mi o funkcję inline, niestety przykłady zawarte w internecie są dość banalne i nie odpowiadają temu czego szukam.

krwq napisał(a):

To co napisales nie ma sensu. To brzmi mniej wiecej tak jakbys chcial napisac funkcje liniowa ktora zwraca dodawanie

Domyślam się że moje pytania mogą nie mieć sensu, ale właśnie dlatego pytam i szukam.

2

Jeśli chcesz funkcję inlinowe'ą, to taką tworzysz. Np może być taka:

inline void Funkcja(char *a, int x, int y)
{
    if (a[y][x] == ' ')printw("OK");
}

To jest jednak jedynie wskazanie i kompilator będzie się starał, że wstawi bezpośrednio w kod Twoją funkcję.
Możesz też zrobić sobie makro, ale to
1) nieeleganckie
2) zaśmiecisz sobie przestrzeń nazw
3) podatne na błędy

0

Gdy wywołujesz funkcję, każdy if jest wykonywany(z tej funkcji).

Jeśli chcesz zwrócić jakąś wartość, to musisz napisać return i tu to co zwracasz.

Jeśli zależy Ci aby wartość była "tylko" wypisana na ekranie(Co jest różnicą) to starczy cout.

Załóżmy że chcesz obliczyć liczbę. Ta liczba może nam być potrzebna do dalszych obliczeń, albo możemy chcieć tylko ją wypisać. Jeśli chcesz tylko wypisać dajesz funkcję void, ona nic nie zwraca, co nie oznacza że nie wypisuje. Nie możesz się do niej odnieść. Załóżmy że chcesz ją zwrócić aby potem coś z nią zrobić. Wtedy zapisujesz zamiast void, int(dowolny typ jaki chcesz zwrócić).

0

Może zrób tablicę zawierająca dozwolone znaki i sprawdzaj, czy dany znak jest tam zawarty I jeśli tak, to go wyświetlaj. Jeśli to C++ to możesz użyć set

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0