Seite 1 von 1
					
				#define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:00
				von joggel
				Hallo,
ich wollte diese Mathe-Bibliothek verwenden: 
http://eigen.tuxfamily.org/index.php?title=Main_Page
Nun hat diese Bibliothek mir über die Ausgabe zu verstehen gegeben, dass ich, wenn ich unter windows kompiliere, 
#define NOMINMAX  schreiben muss. Also die Makros für "min" und "max" ausschalten soll.
Ich habe 
#define NOMINMAX in vor jeder Einbindung von "windows.h" geschrieben.
Nun verwende ich aber std::vector<MyClass>, und da bekomme ich viele Fehlermeldung vom Kompiler, zB:
>c:\program files (x86)\microsoft visual studio 9.0\vc\include\vector(717) : error C2719: '_Val': Formeller Parameter mit __declspec(align('16')) wird nicht ausgerichtet
1>        d:\programmierung\projekte\TestApp\TestApp\mesh.h(12): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::vector<_Ty>".
1>        with
1>        [
1>            _Ty=Face
1>        ]
Irgendwie kann ich mit der Fehlermeldung nix anfangen.
Weiß von Euch jemand Rat?
 
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:04
				von Krishty
				Die Bibliothek verwendet wahrscheinlich Typen, die ausgerichtet sein müssen (also nur an bestimmten glatt teilbaren Adressen im Speicher instanziert werden dürfen, 
falls du dich erinnerst). Das unterstützt 
::std::vector (noch) nicht, darum kannst du sie nicht darin speichern. Die Warnung soll dich darauf hinweisen.
Benutz entweder eine eigene Array-Klasse mit Alignment-Unterstützung, oder kompiliere für x64 (dort wird vom Entwurf her alles mit ausreichender Ausrichtung platziert), oder verwende statische Arrays. Kann auch sein, dass 
std::tr1 was anbietet, weiß ich aber nicht.
Gruß, Ky
 
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:04
				von dot
				Naja, du versuchst offen einen std::vector<Face> zu machen wobei Face mit __declspec(align(16)) deklariert ist. Das funktioinert eben nicht da der Compiler nicht sicherstellen kann dass der vector das Alignment richtig macht. Lösung: __declspec weg und eigenen Allocator schreiben der sich drum kümmert das richtig zu machen.
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:14
				von Krishty
				dot hat geschrieben:Lösung: __declspec weg und eigenen Allocator schreiben
Lösung: __declspec weg
__declspec weg

Damit die Klasse auch im Stapel nicht mehr ausgerichtet wird und man sich schöne Laufzeitfehler einfängt sobald das erste 
movaps neben die Tüte greift?
 
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:16
				von dot
				Ich ging davon aus dass klar ist dass man dann ein zweites struct ohne __declspec oder was auch immer das is brauchen wird um es in den vector zu packen. Oder eben natürlich noch besser was andres als std::vector wie du schon vorgeschlagen hast...
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 17:19
				von Krishty
				Es hat halt nicht jeder eine eigene Mathebibliothek geschrieben ;) Man kann auch einfach by Reference übergeben … das provoziert unter VC hier und da einen Speicherzugriff mehr; aber da dieser Müll von Code Generator eh nichts anderes macht als die ganze Zeit sinnlos zwischen Registern, Speicher und FPU hin- und herzuschieben fällt das nicht ins Gewicht. (Das scheint bei mir außerdem irgendwie die Wahrscheinlichkeit von Compiler-Versagen zu senken ;) )
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 19:13
				von joggel
				Nun gut!
Danke erstmal für die Erklärung :)
Ich schaue mal nach einer Alternative zu std::vector. Da ich keine Ahnung habe, wie das mit dem eigenen Allocator schreiben geht.
Gruß
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 20:13
				von Dirk Schulz
				Hi,
also eigentlich schaut man bei solchen Problemen erstmal in die Doku ... da könnte man z.b. auf sowas:
http://eigen.tuxfamily.org/dox/TopicStlContainers.html
stoßen!  ;)
 
			 
			
					
				Re: #define NOMINMAX vs. std::vector
				Verfasst: 11.07.2011, 20:19
				von joggel
				Da schaut man aber auch immer zuletzt nach.  :oops: