• Keine Ergebnisse gefunden

c.seepold@uni-wuppertal.de WS2010/2011–¨Ubungsblatt629.November2010Abgabe:bis6.Dezember2010an GenerischeProgrammierung(SpezielleKapitelderpraktischenInformatik)

N/A
N/A
Protected

Academic year: 2022

Aktie "c.seepold@uni-wuppertal.de WS2010/2011–¨Ubungsblatt629.November2010Abgabe:bis6.Dezember2010an GenerischeProgrammierung(SpezielleKapitelderpraktischenInformatik)"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

BERGISCHE UNIVERSIT ¨ AT WUPPERTAL

GAUSS-STRASSE 20 42119 WUPPERTAL TELEFAX (0202) 439-2901 TELEFON (0202) 439-0 WWW www.uni-wuppertal.de

Fachbereich C

MATHEMATIK UND NATURWISSENSCHAFTEN Fachgruppe Mathematik und Informatik

Generische Programmierung

(Spezielle Kapitel der praktischen Informatik)

WS 2010/2011 – ¨ Ubungsblatt 6 29. November 2010

Abgabe: bis 6. Dezember 2010 an c.seepold@uni-wuppertal.de

Prof. Dr. Hans-J¨urgen Buhl Praktische Informatik / Numerik

E-Mail: Hans-Juergen.Buhl@math.uni-wuppertal.de WWW: http://www.math.uni-wuppertal.de/buhl

Aufgabe 1. promote trait

Benutzen Sie das Template promote trait in einer Templatefunktion my_min und testen Sie es f¨ur mindestens 10 unterschiedliche Typpaare.

Schreiben Sie ein ¨ahnliches Template arithAverage trait zur Nut- zung in einer Templatefunktion arithAverage(T x, T y) zweier nu- merischer skalarer Parameter. Der Ergebnistyp f¨ur T = int soll dabei jedoch double sein (warum?). Welche Konzepte sollte T modellieren?

Aufgabe 2. SunStudio CC

Welche Vorteile bei der C++-Entwicklung bietet der SunStudio- Compiler

http://www.pcwelt.de/it-profi/business-ticker/593705/sun studio 12 auf multicore cpus getrimmt/?

Wie unterscheidet sich das C++-Namemangling dieses Compilers von dem des GNU-Compilers g++?

Was sind die Auswirkungen dieses Unterschieds?

Lesen Sie dazu

http://docs.sun.com/app/docs/doc/819-5267 und

http://developers.sun.com/solaris/articles/studio qs.html.

Aufgabe 3. non-type template-Parameter Warum funktioniert:

1

(2)

#include <iostream>

using namespace std;

template <bool k> void print () {

if(k==true) // oder auch: if(k) cout << "true" << endl;

else

cout << "false" << endl;

return;

}

int main() {

print<7>();

print<0>();

return 0;

}

Wie viele und welche Inkarnationen der Templatefunktion print() werden automatisch erzeugt?

Welche Regeln gelten f¨ur die Typ-Transformation von non- type Funktionstemplate-Parametern uber¨ diejenigen der type Funktionstemplate-Parameter hinaus?

Erg¨anzen Sie in main() Aufrufe von print<8>(); print<9>(); ...

Was erwarten Sie? ¨Uberpr¨ufen Sie Ihre Erwartungen durch Benutzung von nm.

Aufgabe 4. Template-Funktion mit array-Parameter Vergleichen Sie

#include <iostream>

#include <numeric>

template <typename Type>

Type sum(Type *tp, size_t n) {

return std::accumulate(tp, tp+n, Type());

}

int main() {

int x[10];

for(int l = 0; l < 10; l++) x[l] = l;

2

(3)

std::cout << sum(x, 10) << std::endl;

return(0);

} mit

#include <iostream>

#include <numeric>

template <typename Type, size_t n>

Type sum(const Type (&tp)[n]) {

return std::accumulate(tp, tp+n, Type());

}

int main() {

int x[10];

for(int l = 0; l < 10; l++) x[l] = l;

std::cout << sum(x) << std::endl;

return(0);

}

Welche Vor- und Nachteile bietet die erste Variante gegen¨uber der zweiten? Schreiben Sie eine Template-Funktion unsigned int get dimension(), die die Anzahl der Komponenten eines ¨ubergebe- nen Arrays als Funktionsergebnis liefert.

3

Referenzen

ÄHNLICHE DOKUMENTE

Erg¨anzen Sie Ihre L¨osung von Aufgabe 2 um eine ¨ Uberpr¨ufung des Generischen Parameters InputIterator auf eben diese Eigenschaft (vgl.. 1.15.1 der Materialsammluing) und

Benutzen Sie das Template promote trait in einer Templatefunktion my_min und testen Sie es f¨ur mindestens 10 unterschiedliche Typpaare.. Schreiben Sie ein ¨ahnliches

Wozu werden im C++-Draft N3126 in Abschnitt 20.7 UnaryTypeTraits und wozu BinaryTypeTraits benutzt. Lesen Sie

Warum kann in C++ der Typ des Funktionsergebnisses nicht zur Un- terscheidung weiterer ¨uberladener Funktionsvarianten benutzt werden. Welche Abk¨urzungen werden im GNU3-Mangling

Statten Sie die Templatefunktion arithAverage(T1 x, T2 y) (Auf- gabe 1/Blatt 6) mit eigenen Boost-Concepts aus und benutzen Sie das Makro BOOST CONCEPT REQUIRE() zur Erzwingung

Demonstrieren Sie die Benutzung von static assert(), um die Template-Metafunktion template &lt;unsigned long N&gt; struct binary::value gegen einen unsinnigen Parameter

Demonstrieren Sie static assert() in einem Beispielprogramm, das nur compiliert werden kann, wenn Ihre C++-Sprachumgebung einen 4 Byte langen int-Typ besitzt. Benutzen Sie dabei die

Erstellen Sie eine ¨ Ubersicht der von Ihnen gefundenen Policies und der Ihnen w¨unschenswert erscheinenden Auspr¨agungen dieser Policies.