<?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[Physiklibrary]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es eine typsichere Physiklibrary mit der man z.B. sowas Rechenen kann.</p>
<pre><code>Spannung volt;
Strom ampere;
Widerstand r = volt/ampere;
</code></pre>
<p>Aber nicht sowas</p>
<pre><code>Spannung volt;
Widerstand r = volt*volt;
</code></pre>
<p>Kennt einer sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191283/physiklibrary</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:57:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191283.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Sep 2007 07:33:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Physiklibrary on Sat, 01 Sep 2007 07:33:09 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es eine typsichere Physiklibrary mit der man z.B. sowas Rechenen kann.</p>
<pre><code>Spannung volt;
Strom ampere;
Widerstand r = volt/ampere;
</code></pre>
<p>Aber nicht sowas</p>
<pre><code>Spannung volt;
Widerstand r = volt*volt;
</code></pre>
<p>Kennt einer sowas?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356594</guid><dc:creator><![CDATA[Gibston]]></dc:creator><pubDate>Sat, 01 Sep 2007 07:33:09 GMT</pubDate></item><item><title><![CDATA[Reply to Physiklibrary on Sat, 01 Sep 2007 08:34:30 GMT]]></title><description><![CDATA[<p>wäre mal interessant, hab ich aber bisher noch nichts von gehört. Liegt vieleicht daran, dass E-Techniker nicht unbedingt die besten programmierer sind, und somit mit so einer library nichts anfangen könnten. Aber mein Taschenrechner kann so rechnen xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356614</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Sat, 01 Sep 2007 08:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to Physiklibrary on Sat, 01 Sep 2007 09:11:07 GMT]]></title><description><![CDATA[<p>Hallo,<br />
David Abrahams und Aleksey Gurtovoy zeigen in ihrem Buch &quot;C++ Template Metaprogramming&quot; wie man sowas mit der <a href="http://www.boost.org/libs/mpl/doc/index.html" rel="nofollow">boost::mpl</a> machen kann.<br />
Kann allerdings nicht beurteilen, in wie weit das Ergebnis brauchbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1356640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356640</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 01 Sep 2007 09:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to Physiklibrary on Sat, 01 Sep 2007 09:34:58 GMT]]></title><description><![CDATA[<p>Ich kenne nix fertiges -&gt; sel-bär schreiben.<br />
Wenn wir uns mal auf m, kg, s und A beschränken könnte das so aussehen:</p>
<pre><code class="language-cpp">template &lt;int m_e, int kg_e, int s_e, int A_e&gt; class si_unit
{
public:
	si_unit(double v)
		:	m_value(v)
	{
	}

	double get() const
	{
		return m_value;
	}

	void set(double v)
	{
		m_value = v;
	}

private:
	double m_value;
};

template &lt;int m_e1, int kg_e1, int s_e1, int A_e1, int m_e2, int kg_e2, int s_e2, int A_e2&gt;
si_unit&lt;m_e1+m_e2, kg_e1+kg_e2, s_e1+s_e2, A_e1+A_e2&gt; operator * (si_unit&lt;m_e1, kg_e1, s_e1, A_e1&gt; a, si_unit&lt;m_e2, kg_e2, s_e2, A_e2&gt; b)
{
	return si_unit&lt;m_e1+m_e2, kg_e1+kg_e2, s_e1+s_e2, A_e1+A_e2&gt;(a.get() * b.get());
}

template &lt;int m_e1, int kg_e1, int s_e1, int A_e1, int m_e2, int kg_e2, int s_e2, int A_e2&gt;
si_unit&lt;m_e1-m_e2, kg_e1-kg_e2, s_e1-s_e2, A_e1-A_e2&gt; operator / (si_unit&lt;m_e1, kg_e1, s_e1, A_e1&gt; a, si_unit&lt;m_e2, kg_e2, s_e2, A_e2&gt; b)
{
	return si_unit&lt;m_e1-m_e2, kg_e1-kg_e2, s_e1-s_e2, A_e1-A_e2&gt;(a.get() / b.get());
}

template &lt;int m_e, int kg_e, int s_e, int A_e&gt;
si_unit&lt;m_e, kg_e, s_e, A_e&gt; operator + (si_unit&lt;m_e, kg_e, s_e, A_e&gt; a, si_unit&lt;m_e, kg_e, s_e, A_e&gt; b)
{
	return si_unit&lt;m_e, kg_e, s_e, A_e&gt;(a.get() + b.get());
}

template &lt;int m_e, int kg_e, int s_e, int A_e&gt;
si_unit&lt;m_e, kg_e, s_e, A_e&gt; operator - (si_unit&lt;m_e, kg_e, s_e, A_e&gt; a, si_unit&lt;m_e, kg_e, s_e, A_e&gt; b)
{
	return si_unit&lt;m_e, kg_e, s_e, A_e&gt;(a.get() - b.get());
}

// könnte man wahrscheinlich statisch lösen, aber das tu' ich mir nicht an :)
template &lt;int m_e, int kg_e, int s_e, int A_e&gt; std::string get_name(si_unit&lt;m_e, kg_e, s_e, A_e&gt; const&amp;)
{
	std::stringstream strstr;
	bool empty = true;
	if (m_e != 0)
	{
		strstr &lt;&lt; &quot;m&quot;;
		if (m_e != 1)
			strstr &lt;&lt; &quot;^&quot; &lt;&lt; m_e;
		empty = false;
	}

	if (kg_e != 0)
	{
		strstr &lt;&lt; &quot;kg&quot;;
		if (kg_e != 1)
			strstr &lt;&lt; &quot;^&quot; &lt;&lt; kg_e;
		if (!empty)
			strstr &lt;&lt; &quot; &quot;;
		empty = false;
	}

	if (s_e != 0)
	{
		strstr &lt;&lt; &quot;s&quot;;
		if (s_e != 1)
			strstr &lt;&lt; &quot;^&quot; &lt;&lt; s_e;
		if (!empty)
			strstr &lt;&lt; &quot; &quot;;
		empty = false;
	}

	if (A_e != 0)
	{
		strstr &lt;&lt; &quot;A&quot;;
		if (A_e != 1)
			strstr &lt;&lt; &quot;^&quot; &lt;&lt; A_e;
		if (!empty)
			strstr &lt;&lt; &quot; &quot;;
		empty = false;
	}

	if (empty)
		return &quot;1&quot;;
	else
		return strstr.str();
}

#define SI_TYPEDEF(m, kg, s, A, name, name2)  \
	typedef si_unit&lt;m, kg, s, A&gt; name;  \
	std::string get_name(name const&amp;)  \
	{  \
		return name2;  \
	}

SI_TYPEDEF( 1,  0,  0,  0, meters, &quot;Meter&quot;)
SI_TYPEDEF( 0,  1,  0,  0, kilograms, &quot;Kilogram&quot;)
SI_TYPEDEF( 0,  0,  1,  0, seconds, &quot;Second&quot;)
SI_TYPEDEF( 0,  0,  0,  1, ampere, &quot;Ampere&quot;)
SI_TYPEDEF( 0,  0, -1,  0, hertz, &quot;Hertz&quot;)
SI_TYPEDEF( 1,  1, -2,  0, newtons, &quot;Newton&quot;)
SI_TYPEDEF(-1,  1, -2,  0, pascal_, &quot;Pascal&quot;)
SI_TYPEDEF( 2,  1, -2,  0, joule, &quot;Joule&quot;)
SI_TYPEDEF( 2,  1, -3,  0, watts, &quot;Watt&quot;)
SI_TYPEDEF( 0,  0,  1,  1, coulombs, &quot;Coulomb&quot;)
SI_TYPEDEF( 2,  1, -3, -1, volts, &quot;Volt&quot;)
SI_TYPEDEF(-2, -1,  4,  2, farads, &quot;Farad&quot;)
SI_TYPEDEF( 2,  1, -3, -2, ohms, &quot;Ohm&quot;)
SI_TYPEDEF(-2, -1,  3,  2, siemens, &quot;Siemens&quot;)
SI_TYPEDEF( 2,  1, -2, -1, webers, &quot;Weber&quot;)
SI_TYPEDEF( 0,  1, -2, -1, teslas, &quot;Tesla&quot;)
SI_TYPEDEF( 2,  1, -2, -2, henrys, &quot;Henry&quot;)

SI_TYPEDEF( 2,  0,  0,  0, square_meters, &quot;Meter^2&quot;)
//...

int main() 
{
	volts U(10);
	ampere I(2);
	ohms R = U/I; // geht

//	ohms R2 = volts(1) * volts(1); // geht nicht

	watts P = ampere(10) * volts(20); // geht auch
	joule W = P * seconds(60); // und das auch

	square_meters A = meters(10) * meters(100);
}
</code></pre>
<p>Wenns dir Spass macht kannst du es ja noch um Kelvin, Mole und Candela erweitern <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>
<p>Nachdem das aber kaum ein grosser Aufwand ist wie man sieht, gehe ich fast davon aus dass es sowas (nur wahrscheinlich wesentlich vollständiger) schon irgendwo gibt. Jetzt muss es nurnoch wer finden <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/1356654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1356654</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 01 Sep 2007 09:34:58 GMT</pubDate></item></channel></rss>