Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C++0x: Alle Funktionsadressen einer template-Funktion ermitteln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
13.03.2010, 23:58 Uhr
0xdeadbeef
Gott
(Operator)


Naja, speziell das ließe sich jetzt aber auch einfacher lösen. Beispielsweise

C++:
////////////////////////////////////////////////////////////////////////////////////////////////////
#include <cstddef>
#include <iostream>
#include <tuple>
#include <utility>

template<typename tuple_t, std::size_t pos> struct tuple_for_each_aux {
  template<typename func_t>
  static void run(tuple_t t, func_t const &func) {
    tuple_for_each_aux<tuple_t, pos - 1>::run(t, func);
    func(std::get<pos - 1>(t));
  }
};
template<typename tuple_t> struct tuple_for_each_aux<tuple_t, 0> {
  template<typename func_t>
  static void run(tuple_t t, func_t const &func) { }
};

template<typename func_t, template<typename...> class tuple_template, typename... T>
void tuple_for_each(tuple_template<T...> const &t, func_t const &func) {
  tuple_for_each_aux<tuple_template<T...> const &, sizeof...(T)>::run(t, func);
}

template<typename func_t, template<typename ...> class tuple_template, typename... T>
void tuple_for_each(tuple_template<T...> &t, func_t const &func) {
  tuple_for_each_aux<tuple_template<T...> &, sizeof...(T)>::run(t, func);
}

struct test_func {
  template<typename T> void operator()(T const &t) const {
    std::cout << t << std::endl;
  }

  template<typename T> void operator()(T &t) const {
    std::cout << t << std::endl;
    t *= 2;
  }
};

int main() {
  std::tuple<int, long, double> t(1, 2l, 3.141);
  tuple_for_each(t, test_func());
  std::tuple<int, long, double> const t2 = t;
  tuple_for_each(t2, test_func());
  tuple_for_each(t2, test_func());
}


...und auch das ist eigentlich nur so viel, um const und non-const behandeln zu können. Memberfunktionen kann man auf die Art ggf. über std::mem_fun abhandeln.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 13.03.2010 um 23:59 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.03.2010, 00:46 Uhr
Prog



Das ist nicht ganz das was ich will, aber für einfache Sachen auch ganz nett. Ich will jetzt aber mit meiner Beschreibung von eben auch nicht tiefer ins Detail gehen. ;-) Das führt zu weit vom Thema weg und bläht die Diskussion unnötig auf. Für heute mach ich ohnehin erst mal Schluss.

Bis hierhin also erstmal vielen Danke für deine Hilfe!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: