<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Designproblem]]></title><description><![CDATA[<p>Irgendwie hab ich da gerade nen Balken vorm Kopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">struct foo
{
    float data;
    enum { fvf = (D3DFVF_XYZ) };
};

struct bar : foo
{
	float extra_data;
	enum { fvf = (D3DFVF_XYZ | D3DFVF_TEX1) };
};
</code></pre>
<p>... jetzt hab ich eine Basisklasse in der ich eine virtuelle Funktion habe, die sizeof und dann foo oder bar braucht. Ob es foo, bar oder ne andere, von foo abgeleitete Struct ist, legt dann aber die abgeleitete Klasse fest... Wie kann ich das am besten machen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191394/designproblem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 26 Sep 2026 00:03:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191394.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Sep 2007 16:20:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 16:20:48 GMT]]></title><description><![CDATA[<p>Irgendwie hab ich da gerade nen Balken vorm Kopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">struct foo
{
    float data;
    enum { fvf = (D3DFVF_XYZ) };
};

struct bar : foo
{
	float extra_data;
	enum { fvf = (D3DFVF_XYZ | D3DFVF_TEX1) };
};
</code></pre>
<p>... jetzt hab ich eine Basisklasse in der ich eine virtuelle Funktion habe, die sizeof und dann foo oder bar braucht. Ob es foo, bar oder ne andere, von foo abgeleitete Struct ist, legt dann aber die abgeleitete Klasse fest... Wie kann ich das am besten machen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357372</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 16:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 16:25:55 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>... jetzt hab ich eine Basisklasse in der ich eine virtuelle Funktion habe, die sizeof und dann foo oder bar braucht. Ob es foo, bar oder ne andere, von foo abgeleitete Struct ist, legt dann aber die abgeleitete Klasse fest...</p>
</blockquote>
<p>Bitte präzisiere das ein wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357375</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 02 Sep 2007 16:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 17:26:02 GMT]]></title><description><![CDATA[<p>nja hab halt noch ne Klasse fooObj</p>
<pre><code class="language-cpp">class fooObj
{
    virtual void show_data() { std::cout &lt;&lt; sizeof(/* was hier */) &lt;&lt; std::endl;
};

class barObj : public fooObj
{
    /* was hier */
};
</code></pre>
<p>... es soll halt erst in barObj das genau spezifiziert werden, wovon ich die Größe(sizeof) haben will ... Dachte erst an Pointer (fooObj hat ptr foo*, barObj setzt diesen dann auf barObj ...) geht aber nicht so gut ... zumindest kommt mir gerade nichtin den Sinn wie ich es am besten realisieren sollte. Templates geht nicht, da fooObj mein Interface ist, das ich im std::vector brauche ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357403</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 17:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 17:31:41 GMT]]></title><description><![CDATA[<p>Wahrscheinlich schlechtes Design. Aber nichts hindert dich, show_data erst zu definieren, wenn du eine Definition barObj gesehen hast. Man muss ja nicht jede Memberfunktion gleich bei der Definition der Klasse mitdefinieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357409</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 02 Sep 2007 17:31:41 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 17:33:09 GMT]]></title><description><![CDATA[<p>ja sicher ich kann es in barObj noch definieren ... wollte aber halt, der faulheit halber, verhindern, dass man die funktion noch selbst schreiben muss ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357411</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 17:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 17:33:41 GMT]]></title><description><![CDATA[<p>ich denke am besten oder einfachsten wäre folgendes:</p>
<pre><code class="language-cpp">class foo
{
public:
  foo() : m_Size(sizeof(foo)) { };
  virtual void dosth() { cout &lt;&lt; m_size &lt;&lt; endl; };

protected:
  size_t m_Size;
};

class bar : public foo
{
  bar() : foo() { m_Size = sizeof(bar); };  // init-liste geht hier nicht, weil du in der initlist nicht auf geerbte member kannst.
}:
</code></pre>
<p>wäre ne einfache möglichkeit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357412</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Sun, 02 Sep 2007 17:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 17:46:11 GMT]]></title><description><![CDATA[<p>Darf man fragen, wozu das Ganze gut sein soll? sizeof benötigt man typischerweise nur, um bestimmten low-level Zugriff auf Speicher zu erhalten - und gerade das ist dir bei polymorphen Typen sowieso verwehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357418</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 02 Sep 2007 17:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 18:20:39 GMT]]></title><description><![CDATA[<p>Vermutung:<br />
Es geht wahrscheinlich darum, dass jede abgeleitete Klasse noch mehr vertexdaten wie texturkoordinaten etc speichert. Wenn man die nun in den vertexbuffer kopieren will, braucht man die größe der Vertexdaten. das Problem ist nur, dass diese Klassen keine PODs mehr sind, und man sie deswegen eh nicht in den Vertexbuffer kopieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357442</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 02 Sep 2007 18:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 18:27:51 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Vermutung:<br />
Es geht wahrscheinlich darum, dass jede abgeleitete Klasse noch mehr vertexdaten wie texturkoordinaten etc speichert. Wenn man die nun in den vertexbuffer kopieren will, braucht man die größe der Vertexdaten. das Problem ist nur, dass diese Klassen keine PODs mehr sind, und man sie deswegen eh nicht in den Vertexbuffer kopieren kann.</p>
</blockquote>
<p>Also geht es im Prinzip um den Versuch, eine Basisklasse etwas tun zu lassen, was sie mangels Information (weil diese spezifische Information - wie sind Daten zu kopieren - hier nicht Teil des Interfaces ist) gar nicht in der Lage ist, zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357451</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 02 Sep 2007 18:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 18:41:22 GMT]]></title><description><![CDATA[<p>Hmm otze, deine Vermutung ist korrekt. Hab nicht drang gedacht, das es POD's sein müssen. Wie könnte man es denn sonnst effektiv lösen?</p>
<pre><code class="language-cpp">#if !defined(TEST_VERTEX_H__INCLUDED)
#define TEST_VERTEX_H__INCLUDED

#if (_MSC_VER &gt;= 1300)
#pragma once
#endif // (_MSC_VER &gt;= 1300)

struct TestVertex
{
    FLOAT x;
	FLOAT y;
	FLOAT z;
	std::size_t	data_size;
	enum { fvf = (D3DFVF_XYZ) };
	TestVertex(std::size_t data_size = sizeof(TestVertex)) : x(0.0f), y(0.0f), z(0.0f), data_size(data_size) {}
};

struct TestVertexTexture : TestVertex
{
	FLOAT texture_x;
	FLOAT texture_y;
	enum { fvf = (D3DFVF_XYZ | D3DFVF_TEX1) };
	TestVertexTexture() : texture_x(0.0f), texture_y(0.0f), TestVertex(sizeof(TestVertexTexture)) {}
};

struct TestVertexDiffuse : TestVertex
{
	DWORD color;
	enum { fvf = (D3DFVF_XYZ | D3DFVF_DIFFUSE) };
	TestVertexDiffuse() : color(D3DCOLOR_XRGB(0, 0, 0)), TestVertex(sizeof(TestVertexDiffuse)) {}
};

#endif // TEST_VERTEX_H__INCLUDED
</code></pre>
<p><strong>edit</strong><br />
hatte quatsch geschrieben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357455</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 18:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 18:40:42 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>wie soll ich es sonnst lösen? Wie sehe dein Vorschlag aus?</p>
</blockquote>
<p>Zeig bitte erst mal, wie es angewendet werden soll. Schließlich ist das ja der eigentliche Ausgangspunkt jedes Designs.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357456</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 02 Sep 2007 18:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 18:44:44 GMT]]></title><description><![CDATA[<p>Nja ... halt Basis TestVertex ... kommt immer drauf an, was man braucht ... manchmal einfach farbe, nen anderes mal soll ne textur drauf ... dann wiederum brauch ich noch normalen usw.</p>
<pre><code class="language-cpp">class TestRenderableObject : public TestObject
</code></pre>
<p>...</p>
<pre><code class="language-cpp">void TestRenderableObject::render() const
{
	if (m_ppVertexBuffer == NULL || m_ppIndexBuffer == NULL)
		throw direct3d_error(&quot;Invalid data buffer!&quot;);

	TestDirect3D&amp; inst = TestDirect3D::instance();
	inst.get_device()-&gt;SetStreamSource(0, m_ppVertexBuffer, 0, sizeof(/*VertexType*/));
	inst.get_device()-&gt;SetFVF(/*VertexType*/::fvf);
	inst.get_device()-&gt;SetIndices(m_ppIndexBuffer);
	inst.get_device()-&gt;DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_countVertex, 0, m_countIndex);
}
</code></pre>
<p>... könnte natürlich auch jedes Objekt seine render-funktion selbst schreiben lassen ... muss nicht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357459</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 18:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 19:55:41 GMT]]></title><description><![CDATA[<p>IMO gehört die Render Funktion sowieso nicht ins 3D-Objekt rein, sondern das 3D-Objekt sollte genügend Daten nach aussen zugänglich machen dass man &quot;von extern&quot; rendern kann.<br />
Spätestens wenn ein Objekt mal aus mehreren Meshes bestehen kann, du nach Textur(en) sortieren willst, oder Alpha-Blending verwenden, wird das wohl lästig werden wenn das Objekt sich selbst rendert.</p>
<p>Wenn du dabei bleiben willst mach doch einfach eine virtuelle Funktion:</p>
<pre><code class="language-cpp">// ...
    struct VertexFormatInfo
    {
        size_t m_vertexSize;
        uint32_t m_vertexFormat;
    };
    virtual void GetVertexFormat(VertexFormatInfo&amp; vfi) = 0;
    // ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1357492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357492</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 Sep 2007 19:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 20:46:47 GMT]]></title><description><![CDATA[<p>Hmm ... naja vom logischen her, ist es eine Funktion des Objektes. Natürlich könnte ich den Vertex und Index-Buffer per Getter/Setter in ObjectManager beim rendern abfragen und dann nutzen ... aber wäre unlogisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357509</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 02 Sep 2007 20:46:47 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Sun, 02 Sep 2007 21:39:38 GMT]]></title><description><![CDATA[<p>am besten wäre es, wenn du den Vertexbuffern überlässt, wie sie die daten, die sie verwalten zu rendern haben. Die Buffer verwalten dann einfach nur einen Datenblock mit den informationen, welches format und welche größe die Daten haben.</p>
<p>Direktzugriff auf die Daten ist dann ein wenig Kniffliger, zumindest wenns typsicher sein soll, aber das kriegt man auch noch irgendwie hin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357523</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 02 Sep 2007 21:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Designproblem on Mon, 03 Sep 2007 13:05:29 GMT]]></title><description><![CDATA[<p>? Wie meinst de jetzt? Soll ich ne Vertex und Index-Buffer-Klasse anlegen, die dann selbst das Format ihrer Daten speichert? Hmm ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1357892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1357892</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 03 Sep 2007 13:05:29 GMT</pubDate></item></channel></rss>