<?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[Members zur Laufzeit auflisten]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit Klassen, Funktionen bzw. Methoden einer Klasse zur Laufzeit auflisten zu lassen, also dass man praktisch quasi zur Laufzeit eine Liste erzeugen kann, die man irgendwie weiter verwenden kann, um z.B. diese generisch für eine API oder sowas bereitstellen kann. Keine Ahnung ob das irgendwie Sinn macht, aber rein aus Neugier würde mich das interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329227/members-zur-laufzeit-auflisten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 30 May 2026 13:56:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329227.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Nov 2014 15:21:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 15:21:17 GMT]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit Klassen, Funktionen bzw. Methoden einer Klasse zur Laufzeit auflisten zu lassen, also dass man praktisch quasi zur Laufzeit eine Liste erzeugen kann, die man irgendwie weiter verwenden kann, um z.B. diese generisch für eine API oder sowas bereitstellen kann. Keine Ahnung ob das irgendwie Sinn macht, aber rein aus Neugier würde mich das interessieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427448</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Thu, 13 Nov 2014 15:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 15:34:06 GMT]]></title><description><![CDATA[<p>Sinn macht es keinen und bei &quot;klassischen&quot; C++-Methoden / -Membern ist das auch nicht möglich. Man kann allerdings Klassen einfach als <code>std::map</code> s von <code>std::string</code> s und <code>std::function</code> s / <code>boost::any</code> s implementieren und dann auf Methoden / Membern zugreifen indem man deren Name als String angibt. Das ist jedoch extrem unpraktisch und bedeutend langsamer.</p>
<p>Sind dir Polymorphie / virtuelle Funktionen / Interfaces / Duck Typing Begriffe? Ich denke, du brauchst etwas anderes als du zu brauchen glaubst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427449</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 13 Nov 2014 15:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 15:51:55 GMT]]></title><description><![CDATA[<p>dixidix schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit Klassen, Funktionen bzw. Methoden einer Klasse zur Laufzeit auflisten zu lassen, also dass man praktisch quasi zur Laufzeit eine Liste erzeugen kann, die man irgendwie weiter verwenden kann, um z.B. diese generisch für eine API oder sowas bereitstellen kann. Keine Ahnung ob das irgendwie Sinn macht, aber rein aus Neugier würde mich das interessieren.</p>
</blockquote>
<p>Ne, C++ hat kein Reflection.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427453</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Thu, 13 Nov 2014 15:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 15:57:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Sind dir Polymorphie / virtuelle Funktionen / Interfaces / Duck Typing Begriffe? Ich denke, du brauchst etwas anderes als du zu brauchen glaubst.</p>
</blockquote>
<p>Ich will nicht auf vererbung oder Sowas hinaus, sondern mehr geht es darum Funktionen und Methoden dynamisch bereit zu stellen, die man in eine API einbauen könnte. Ein Beispiel wäre z.B. das ganze in Verbindung mit Lua zu machen. Hier wird glaube ich über Callbacks gearbeitet. Wie das da genau geht, bin ich mir nicht ganz sicher, aber prinzipiell müssten bestimmte Funktionen über eine API-Instanz dem Luainterpreter bekannt gemacht werden, um auf diese in einem Lua-Script zugreifen zu können. Damit man eben nicht jede Änderung im Basiscode in die Schnittstelle eintragen muss, würde dafür eine dynamische Lösung sicher bequemer sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427454</guid><dc:creator><![CDATA[dixidix]]></dc:creator><pubDate>Thu, 13 Nov 2014 15:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 16:19:15 GMT]]></title><description><![CDATA[<p>Gib deiner Klasse eine Methode, die einen Container oder was auch immer mit den benötigten Informationen befüllt. Als Programmierer einer Klasse weißt du ja, welche Member die Klasse hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427464</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 13 Nov 2014 16:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 16:29:21 GMT]]></title><description><![CDATA[<p>dixidix schrieb:</p>
<blockquote>
<blockquote>
<p>Sind dir Polymorphie / virtuelle Funktionen / Interfaces / Duck Typing Begriffe? Ich denke, du brauchst etwas anderes als du zu brauchen glaubst.</p>
</blockquote>
<p>Ich will nicht auf vererbung oder Sowas hinaus, sondern mehr geht es darum Funktionen und Methoden dynamisch bereit zu stellen, die man in eine API einbauen könnte. Ein Beispiel wäre z.B. das ganze in Verbindung mit Lua zu machen. Hier wird glaube ich über Callbacks gearbeitet. Wie das da genau geht, bin ich mir nicht ganz sicher, aber prinzipiell müssten bestimmte Funktionen über eine API-Instanz dem Luainterpreter bekannt gemacht werden, um auf diese in einem Lua-Script zugreifen zu können. Damit man eben nicht jede Änderung im Basiscode in die Schnittstelle eintragen muss, würde dafür eine dynamische Lösung sicher bequemer sein.</p>
</blockquote>
<p>Ich selbe arbeite an einer Scriptsprache und bei mir muss man für einen Typen folgendes tun:</p>
<pre><code>interface.register_type&lt;std::string&gt;(&quot;string&quot;);
interface.register_function(&quot;string::c_str&quot;, &amp;std::string::c_str);
</code></pre>
<p>// usw. für alle anderen Methoden<br />
Einfach nur</p>
<pre><code>interface.register_type_and_all_members&lt;std::string&gt;(&quot;string&quot;);
</code></pre>
<p>geht leider (noch) nicht. Aber man muss nicht jede Änderung übertragen, auch wenn sich Signaturen oder so ändern; nur das Script muss angepasst werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427468</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 13 Nov 2014 16:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Thu, 13 Nov 2014 22:22:20 GMT]]></title><description><![CDATA[<p>Wir brauchen Compile-Time-Reflection!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427535</guid><dc:creator><![CDATA[kommbeil]]></dc:creator><pubDate>Thu, 13 Nov 2014 22:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Fri, 14 Nov 2014 07:16:19 GMT]]></title><description><![CDATA[<p>Hier ein simples Beispiel, das schonmal sowas mit Membern machen kann.<br />
Da ist auch noch erweiterungsspielraum für mehr und kann umgemodelt werden.</p>
<pre><code>#include &lt;boost/fusion/include/adapt_struct.hpp&gt;
#include &lt;boost/fusion/mpl.hpp&gt;
#include &lt;boost/fusion/adapted.hpp&gt;
#include &lt;boost/fusion/include/at.hpp&gt;
#include &lt;boost/fusion/include/for_each.hpp&gt;
#include &lt;boost/mpl/range_c.hpp&gt;
#include &lt;boost/mpl/for_each.hpp&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;

struct A
{
    int id;
    std::string name;
    int uid;
};

BOOST_FUSION_ADAPT_STRUCT (
    A,
    (int, id)
    (std::string, name)
    (int, uid)
)

template &lt;typename T&gt;
void list(T const&amp; obj)
{
    using range =
    boost::mpl::range_c &lt;int, 0, boost::fusion::result_of::size&lt;T&gt;::type::value&gt;;

    boost::mpl::for_each &lt;range&gt; (std::bind&lt;void&gt;(
        [&amp;](T const&amp; object, auto Index = {}) {
            std::cout &lt;&lt; boost::fusion::extension::struct_member_name&lt;T, decltype(Index)::value&gt;::call() &lt;&lt; &quot;: &quot; // name
                      &lt;&lt; boost::fusion::at&lt;decltype(Index)&gt;(object) &lt;&lt; &quot;\n&quot;; // value
        },
        std::cref(obj),
        std::placeholders::_1
    ));
}

int main()
{
    list&lt;A&gt;(A{5, &quot;Hello&quot;, 3});
}
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>id: 5<br />
name: Hello<br />
uid: 3</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2427563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427563</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 14 Nov 2014 07:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Fri, 14 Nov 2014 08:03:14 GMT]]></title><description><![CDATA[<p>Natürlich kann man dann auch anfangen die Typen durch type_traits zu spalten und so zu identifizieren und gesondert behandeln. Jemand der besser ist als ich, kann damit bestimmt schöne Sachen zaubern.</p>
<p>Hier ein Beispiel mit Memberfunctions.</p>
<pre><code>#include &lt;boost/fusion/include/adapt_struct.hpp&gt;
#include &lt;boost/fusion/mpl.hpp&gt;
#include &lt;boost/fusion/adapted.hpp&gt;
#include &lt;boost/fusion/include/at.hpp&gt;
#include &lt;boost/fusion/include/for_each.hpp&gt;
#include &lt;boost/mpl/range_c.hpp&gt;
#include &lt;boost/mpl/for_each.hpp&gt;
#include &lt;boost/fusion/adapted/struct/detail/extension.hpp&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;type_traits&gt;
#include &lt;boost/type_index.hpp&gt;

struct A
{
    int id;
    std::string name;
    int uid;
    void f();
};

using f_type = decltype(&amp;A::f);

BOOST_FUSION_ADAPT_STRUCT (
    A,
    (int, id)
    (std::string, name)
    (int, uid)
    (f_type, f)
)

template &lt;typename T, typename U&gt;
typename std::enable_if &lt;std::is_member_function_pointer&lt;typename std::remove_reference&lt;T&gt;::type&gt;::value, void&gt;::type Selector(U const&amp;)
{
    std::cout &lt;&lt; &quot;FUNCTION_TYPE&quot;;
}

template &lt;typename T, typename U&gt;
typename std::enable_if &lt;!std::is_member_function_pointer&lt;typename std::remove_reference&lt;T&gt;::type&gt;::value, void&gt;::type Selector(U const&amp; obj)
{
    std::cout &lt;&lt; boost::typeindex::type_id_with_cvr&lt;T&gt;().pretty_name();
}

template &lt;typename T&gt;
struct Helper
{
    template&lt;class Index&gt;
    void operator()(Index, T object) const {
        std::cout &lt;&lt; boost::fusion::extension::struct_member_name&lt;T, Index::value&gt;::call() &lt;&lt; &quot;: &quot;;
        Selector&lt;typename boost::fusion::result_of::at_c&lt;T, Index::value&gt;::type&gt;(object);
        std::cout &lt;&lt; &quot;\n&quot;;
    }
};

template &lt;typename T&gt;
void list(T const&amp; obj)
{
    using range =
    boost::mpl::range_c &lt;int, 0, boost::fusion::result_of::size&lt;T&gt;::type::value&gt;;

    boost::mpl::for_each &lt;range&gt; (
        std::bind&lt;void&gt;(Helper&lt;T&gt;{}, std::placeholders::_1, std::cref(obj))
    );
}

int main()
{
    auto inst = A{5, &quot;Hello&quot;, 3};
    list&lt;A&gt;(inst);
}
</code></pre>
<p>Ausgabe:</p>
<blockquote>
<p>id: int&amp;<br />
name: std::string&amp;<br />
uid: int&amp;<br />
f: FUNCTION_TYPE</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2427566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427566</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 14 Nov 2014 08:03:14 GMT</pubDate></item><item><title><![CDATA[Reply to Members zur Laufzeit auflisten on Fri, 14 Nov 2014 17:31:40 GMT]]></title><description><![CDATA[<p>Also ich kenne 2 Möglichkeiten um dynamisch an Funktionen aus einem Modul (exe oder dll) zu kommen. Entweder 1. du exportierst deine Funktionen und schaust anschließend in der Exporttable deines Moduls nach (was sogar Sinn macht, wenn du eh vor hast eine DLL zu programmieren, wenn du den Code dann aber statisch linken willst, hast du wieder ein Problem)<br />
Oder 2. du lässt dir von Visual Studio Debuginformationen generieren (im Debugmodus macht Visual Studio das von selbst) und lädst diese anschließend mit der von Microsoft bereitgestellten Lib um die Debuginfromationen auswerten zu können.<br />
Beides nicht schön, beantwortet aber denke ich mal deine Frage.</p>
<p>Hab das mal verwendet, um für UnitTest nur bestimmte Funktionen zu detouren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2427648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2427648</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Fri, 14 Nov 2014 17:31:40 GMT</pubDate></item></channel></rss>