<?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[Suche nach Ideen, function bindings zu definieren]]></title><description><![CDATA[<p>Hallo,<br />
für eine GATT server library (<a href="https://github.com/TorstenRobitzki/bluetoe" rel="nofollow">Bluetoe</a>) suche ich gerade nach design Ideen, um read/write handler für den Benutzer anzubieten.</p>
<p>GATT ist ganz grob gesagt, so etwas wie eine Key-Value Datenbank, die auf ganz kleinen Mikrocontrollern läuft und über Bluetooth bedienbar ist. Da die Zielhardware sehr kleine Mikrocontroller sind, verbiete sich die Verwendung von dynamischem Speicher. Selbst die Verwendung von Variablen, würde ich gerne vermeiden, wenn es eine Möglichkeit gibt, Konstanten zu verwenden.</p>
<p>Das Beispiel hier zeigt, das Dilemma ein wenig:</p>
<pre><code>#include &lt;bluetoe/server.hpp&gt;
#include &lt;bluetoe/service.hpp&gt;

bluetoe::att_error_codes read_handler( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );

struct static_handler {
    static bluetoe::att_error_codes read( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );
};

struct handler {
    bluetoe::att_error_codes read( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );
    bluetoe::att_error_codes read_c( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) const;
    bluetoe::att_error_codes read_v( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) volatile;
    bluetoe::att_error_codes read_vc( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) const volatile;
} handler_instance;

bluetoe::server&lt;
    bluetoe::service&lt;
        bluetoe::service_uuid&lt; 0x8C8B4094, 0x0DE2, 0x499F, 0xA28A, 0x4EED5BC73CA9 &gt;,
        bluetoe::characteristic&lt;
            bluetoe::free_read_handler&lt; static_handler::read &gt;,
            bluetoe::free_read_handler&lt; read_handler &gt;,
            bluetoe::member_read_handler&lt; handler, &amp;handler::read, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_c&lt; handler, &amp;handler::read_c, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_v&lt; handler, &amp;handler::read_v, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_vc&lt; handler, &amp;handler::read_vc, &amp;handler_instance &gt;
        &gt;
    &gt;
&gt; gatt_server;
</code></pre>
<p>Das Template bluetoe::characteristic soll einen Handler als parameter mit bekommen und somit definiert sein, was zu tun ist, wenn ein Wert aus der &quot;Datenbank&quot; gelesen werden soll.</p>
<p>Für freie Funktionen und member brauche ich schon mal zwei verschiedene templates, um die Funktionszeiger aufzunehmen. Für die member functions kommen dann noch optionale cv qualifier dazu.</p>
<p>Könnte eine constexpr Function hier evtl. helfen?</p>
<p>Wer hat eine Idee, wie man das möglichst einheitlich lösen kann? Eine Lösung im C++11 Raum wäre ideal.</p>
<p>Schönen Dank im Voraus,<br />
Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335726/suche-nach-ideen-function-bindings-zu-definieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 07:13:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335726.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Dec 2015 15:04:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche nach Ideen, function bindings zu definieren on Mon, 07 Dec 2015 16:55:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
für eine GATT server library (<a href="https://github.com/TorstenRobitzki/bluetoe" rel="nofollow">Bluetoe</a>) suche ich gerade nach design Ideen, um read/write handler für den Benutzer anzubieten.</p>
<p>GATT ist ganz grob gesagt, so etwas wie eine Key-Value Datenbank, die auf ganz kleinen Mikrocontrollern läuft und über Bluetooth bedienbar ist. Da die Zielhardware sehr kleine Mikrocontroller sind, verbiete sich die Verwendung von dynamischem Speicher. Selbst die Verwendung von Variablen, würde ich gerne vermeiden, wenn es eine Möglichkeit gibt, Konstanten zu verwenden.</p>
<p>Das Beispiel hier zeigt, das Dilemma ein wenig:</p>
<pre><code>#include &lt;bluetoe/server.hpp&gt;
#include &lt;bluetoe/service.hpp&gt;

bluetoe::att_error_codes read_handler( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );

struct static_handler {
    static bluetoe::att_error_codes read( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );
};

struct handler {
    bluetoe::att_error_codes read( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size );
    bluetoe::att_error_codes read_c( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) const;
    bluetoe::att_error_codes read_v( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) volatile;
    bluetoe::att_error_codes read_vc( std::size_t offset, std::size_t read_size, std::uint8_t* out_buffer, std::size_t&amp; out_size ) const volatile;
} handler_instance;

bluetoe::server&lt;
    bluetoe::service&lt;
        bluetoe::service_uuid&lt; 0x8C8B4094, 0x0DE2, 0x499F, 0xA28A, 0x4EED5BC73CA9 &gt;,
        bluetoe::characteristic&lt;
            bluetoe::free_read_handler&lt; static_handler::read &gt;,
            bluetoe::free_read_handler&lt; read_handler &gt;,
            bluetoe::member_read_handler&lt; handler, &amp;handler::read, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_c&lt; handler, &amp;handler::read_c, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_v&lt; handler, &amp;handler::read_v, &amp;handler_instance &gt;,
            bluetoe::member_read_handler_vc&lt; handler, &amp;handler::read_vc, &amp;handler_instance &gt;
        &gt;
    &gt;
&gt; gatt_server;
</code></pre>
<p>Das Template bluetoe::characteristic soll einen Handler als parameter mit bekommen und somit definiert sein, was zu tun ist, wenn ein Wert aus der &quot;Datenbank&quot; gelesen werden soll.</p>
<p>Für freie Funktionen und member brauche ich schon mal zwei verschiedene templates, um die Funktionszeiger aufzunehmen. Für die member functions kommen dann noch optionale cv qualifier dazu.</p>
<p>Könnte eine constexpr Function hier evtl. helfen?</p>
<p>Wer hat eine Idee, wie man das möglichst einheitlich lösen kann? Eine Lösung im C++11 Raum wäre ideal.</p>
<p>Schönen Dank im Voraus,<br />
Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478551</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Mon, 07 Dec 2015 16:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach Ideen, function bindings zu definieren on Mon, 07 Dec 2015 18:16:54 GMT]]></title><description><![CDATA[<p>Mir ist dein Problem noch nicht so ganz klar. Geht es dir um die Vermeidung von Variablen oder darum <code>read_handler</code> zu vereinheitlichen? Variablen sehe ich momentan jedenfalls keine. Die Adresse der Funktionen und Pointer aufs Objekt sind doch alles Template Parameter und damit compilezeit Konstanten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478570</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Mon, 07 Dec 2015 18:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach Ideen, function bindings zu definieren on Mon, 07 Dec 2015 18:32:10 GMT]]></title><description><![CDATA[<p><s>std::function und std::bind sollte dein Problem lösen</s> ka ob man die auch ohne dynamischen Speicher nutzen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478571</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Mon, 07 Dec 2015 18:32:10 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach Ideen, function bindings zu definieren on Mon, 07 Dec 2015 21:27:34 GMT]]></title><description><![CDATA[<p>sebi707 schrieb:</p>
<blockquote>
<p>Mir ist dein Problem noch nicht so ganz klar. Geht es dir um die Vermeidung von Variablen oder darum <code>read_handler</code> zu vereinheitlichen? Variablen sehe ich momentan jedenfalls keine. Die Adresse der Funktionen und Pointer aufs Objekt sind doch alles Template Parameter und damit compilezeit Konstanten.</p>
</blockquote>
<p>Ok, sorry. Habe ich mich mal wieder nicht so klar ausgedrückt. Im Beispiel oben, brauche ich 6 verschiedene templates mit 6 verschiedenen Namen. Die kann sich wahrscheinlich keiner merken. Im Idealfall gäbe es nur ein, leicht zu merkendes Konstrukt. So etwas wie std::bind, das dann aber keine Objekt erzeugt, sondern einen Typen. Ich werde mal mit constexpr und einer Funktion experimentieren, damit könnten Ausdrücke wie:</p>
<pre><code>decltype( bluetoe::bind( &amp;handler::read_c, &amp;handler ) )
</code></pre>
<p>mfg Torsten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478592</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Mon, 07 Dec 2015 21:27:34 GMT</pubDate></item><item><title><![CDATA[Reply to Suche nach Ideen, function bindings zu definieren on Mon, 07 Dec 2015 21:30:22 GMT]]></title><description><![CDATA[<p>roflo schrieb:</p>
<blockquote>
<p><s>std::function und std::bind sollte dein Problem lösen</s> ka ob man die auch ohne dynamischen Speicher nutzen kann.</p>
</blockquote>
<p>Ja, std::bind wäre cool, allerdings könnte es dynamischen Speicher verwenden, wird aber auf jeden Fall RAM belegen und lässt sich nur dann in einen Typen konvertieren, wenn man irgend wo eine statische Variable davon anlegt und die Adresse davon nimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2478593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2478593</guid><dc:creator><![CDATA[Torsten Robitzki]]></dc:creator><pubDate>Mon, 07 Dec 2015 21:30:22 GMT</pubDate></item></channel></rss>