N
Ad aCTa schrieb:
Wieso? Ich schätze, fast alles in der Standardbibliothek sind Templates.
Naja, die gesamte C-Bibliothek schon mal nicht (aber ok, da sind wohl mehr Deklarationen).
Trotzdem liegst du falsch. Weil du mir nicht glauben wirst, habe ich ein Programm geschrieben:
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <boost/preprocessor/repetition/repeat.hpp>
#define DEFINE_USELESS_FUNC(Z, N, IDENTIFIER) \
void IDENTIFIER ## N(int a, double d, bool b) \
{ \
long l = a*d - b; \
std::vector<int> v(100, l); \
v[99] = d; \
std::sort(v.begin(), v.end()); \
std::random_shuffle(v.begin(), v.end()); \
std::cout << v[99] << v[rand() % 100]; \
std::list<int> w(v.begin(), v.end()); \
w.sort(); \
std::cout << w.back() << std::endl; \
}
#define CALL_USELESS_FUNC(Z, N, IDENTIFIER) \
IDENTIFIER ## N(N, 3.1415, false);
// ========== Eigentlicher Code ab hier ==========
//#define USE_USELESS_FUNC
BOOST_PP_REPEAT(150, DEFINE_USELESS_FUNC, useless)
int main()
{
#ifdef USE_USELESS_FUNC
BOOST_PP_REPEAT(150, CALL_USELESS_FUNC, useless)
#endif
}
Die Präprozessormetaprogrammierung ist nur zum Definieren mehrerer Funktionen, sodass man den Unterschied gut sieht.
So ist die .exe -Datei 7kB gross. Definiere ich USE_USELESS_FUNC , erhöht sich die Grösse auf 127kB. Also irgendwas an deiner Theorie kann nicht ganz stimmen. Kompiliert wurde übrigens auf MSVC++ 2008 im Release-Modus.