2010-11-02 5 views
12

Ich habe verschiedene Code-Snippets mit diesen Typen gesehen, aber ich habe nicht gesehen, ob sie in einigen < Standard-Header-Datei > definiert sind oder nur in einem "lokalen definiert Header-Datei "oder sogar auf Dateiebene.Was ist mit den Typen int2, int3, float2, float3 usw.

Also was ich mich wundere ist: Gibt es eine Standard-Header-Datei, die diese Typen definiert? Oder gibt es einige Standarddefinitionen, die jeder verwenden sollte, die ich kopieren sollte?

Ich denke, dass eine mögliche und häufige Verwendung dieser Arten Koordinaten darstellen, bin ich falsch?

Gibt es noch etwas, worüber ich nachdenken sollte, wenn ich diese verwenden möchte, um Positionen in einem Raster darzustellen? Gründe warum oder warum nicht?

EDIT:

Klarstellung: INT2 Mittel ein Paar von ints, float3 bedeutet ein Triplett von Schwimmern.

Wenn diese Typen irgendwo vordefiniert sind, wäre es schön, sie zu verwenden, anstatt sie von Grund auf neu schreiben zu müssen, einschließlich der algebraischen Standardfunktionen (Operator +, Operator- usw.).

+1

Typen sind nur Namen, nicht zu viel über sie. Wenn Sie viele 2D-Punkte weitergeben müssen, verwenden Sie einfach ein 'struct Point2D {int x; int y; }; '. Dies ist wahrscheinlich genau das, was diese Typen sind. Haben Sie ihre Definition in dem Projekt, das Sie in Ihrem Beitrag erwähnt haben, aufgespürt? – rubenvb

+0

Ich habe gerade Ausschnitte des Quellcodes im Internet gefunden, so dass ich nicht tiefer in die Projekte für irgendwelche Definitionen graben musste. Aber ich habe einen Tipp über CUDA bekommen, also werde ich mich darum kümmern! :) – Moberg

Antwort

17

Diese Typen gehören nicht zum Standard C++. Sie können entweder in einer Bibliothek eines Drittanbieters definiert sein oder Sie suchen einen anderen Dialekt oder eine andere Sprache.

GPU-Code (Shader-Sprachen wie GLSL, Cg oder HLSL, oder GPGPU-Zeug wie CUDA oder OpenCL) definiert Typen wie diese normalerweise als Namen für die entsprechenden SIMD-Datentypen.

+0

Diese SIMD-Datentypen, ist es irgendwas, was jemand benutzt? – Moberg

+1

In diesen Sprachen werden sie extrem häufig verwendet, ja, weil die GPU für solche Typen ausgelegt ist. In regulären C++ existieren diese spezifischen Typen nicht, aber auf vielen CPUs sind stattdessen andere SIMD-Typen verfügbar (x86 hat beispielsweise __m128, was im Grunde 4 Gleitkommazahlen ist), und diese werden manchmal verwendet, aber nicht so oft und typischerweise nur in leistungsabhängigem Code. – jalf

+0

Soo, jemand kümmert sich darum, mir zu sagen, warum das abgelehnt wurde? Habe ich etwas falsches gesagt? – jalf

1

AFAIK gibt es keine Standard-Header-Datei, die diese Typen definiert. Gemäß Ihrer Beschreibung bedeutet int2 ein Paar von zwei int s, die in C++ als std::pair<int, int> dargestellt werden können.

0

Diese Typen sind nicht Standard und ich habe sie nie gesehen. Sind Sie sicher, dass sie nicht als (schreckliche Auswahl von) Bezeichnern anstelle von Typen verwendet wurden?

Einige Nicht-Standard-Typen, die sehr wahrscheinlich verfügbar sind sowieso sind int32_t, uint64_t usw. (Diese werden von C99 angegeben, so dass die meisten modernen C++ Compiler auch lassen Sie sie in C++ verwenden.)

+3

'int32_t',' uint64_t' usw. sind * Standard * -Typen. Sie finden sie im C99-Standard (als 'int _t', 'uint _t', usw.) im Header' '. – kennytm

+1

Ah, ordentlich. Ich sollte wahrscheinlich eine Kopie des C99-Standards bekommen.(Obwohl dieser mit C++ markiert war, ist C99 technisch noch kein offizieller Teil von C++. Ich weiß 'int32_t' und Freunde sind nicht in C++ 03.) – aschepler

+2

ist Teil von C++ 0x. Außerdem sind die neuen integrierten Typen in C++ 0x (Unicode-Zeichentypen) in definiert. –

8

Sie werden verwendet, in CUDA (und openCL?), wo Sie Floats mit bestimmten Größen und Speicherverbrauch und Ausrichtung haben, ist eine große Sache.

1

Ich bleibe bei den POSIX-Typen definiert in <stdint.h>. Es scheint, als ob jeder seine eigenen Namen für Dinge definiert und ich habe ein Projekt gehabt, bei dem die Namen kollidieren. Es ist zu einem neuen Paradigma für mich geworden, meine eigenen "Haustier" -Namen nicht für Typen zu definieren.

+0

Sie müssen Ihre spitzen Klammern zu > und < ändern Was ist POSIX? – Moberg

+1

Portable Operating System Interface [für Unix] http://en.wikipedia.org/wiki/POSIX – Jay

+0

So erstellen Sie nie Klassen und/oder Strukturen? : S – Moberg

Verwandte Themen