Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Funkcja przyjmująca różnego rodzaju argumenty


Rekomendowane odpowiedzi

Opublikowano

Witam.
Dzisiaj chciałem zapytać czy jest możliwość w c++ utworzenia funkcji która przyjmuje 2 podstawowe argumenty(niezmienne) i kolejne np 4 argumenty które mogą być różnego typu(string,int,duble itd..).
Nie jestem w stanie skorzystać z google ponieważ nawet nie wiem jak to dobrze wytłumaczyć.

bool Add_log(int action,arg1 ,arg2, arg3, arg4) 

Gdzie arg1,arg2,arg3,arg4 są różnego typu np. arg1 podczas pierwszego wywołania przyjmuje int a podczas drugiego string identyczna sytuacja z resztą 
Opublikowano

template <typename F>
bool Add_log(int action,F&& first)
{
   //cos operujacego na first korzystając z std::forward<F>
    std::cout << std::forward<F>(first);
    return true;
}

template <typename F, typename... T>
bool Add_log(int action,F&& first,T&&... tail)
{
    //cos operujacego na first korzystając z std::forward<F>
    std::cout << std::forward<F>(first) << ' ';
    Add_log(action, std::forward<T>(tail)...);

}
Add_log(1, 123, "sddsds", 43.5f);

google: 'variadic templates', opcjonalnie 'perfect forwarding', 'forwarding/universal references'

Opublikowano

szablony (templates) albo przeladowywanie funkcji albo przekazywanie argumentow przez void ptr

Ręczne przeładowywanie funkcji odpada, bo on chce dowolnego typu a nie że trzeba będzie robić nową wersję funkcji dla każdego typu - szablony robią to za ciebie. Przekazywanie argumentów przez void* również nie ma sensu, gdyż raczej chce coś z ich wartościami zrobić, a nic nie zrobi bez informacji o typie.

Opublikowano

Ręczne przeładowywanie funkcji odpada, bo on chce dowolnego typu a nie że trzeba będzie robić nową wersję funkcji dla każdego typu - szablony robią to za ciebie. Przekazywanie argumentów przez void* również nie ma sensu, gdyż raczej chce coś z ich wartościami zrobić, a nic nie zrobi bez informacji o typie.

idac tym tropem nie widze sensu funkcji, ktora raz przyjmuje 5 intow, a innym razem 3 double 1 stringa i 1 jakis customowy obiekt np, chyba ze wlasnie sie jej bedzie uzywac do wypisywania czegos.

­

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...