Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Lokale Variablen aus Callbacks zugreifen.

3 views
Skip to first unread message

Bonita Montero

unread,
Sep 12, 2022, 1:59:27 AM9/12/22
to
Wenn man bei einer C-API einen Callback hat, dann kann man daraus ja
nur auf globale Variablen bzw. das, auf was der void-Pointer der einem
gegebenenfalls mitgegeben wird zeigt zugreifen.

Hier ein kleines Beispiel wie man in C++11 / C++20 auch direkt auf
lokale Variablen zugreifen kann.

#include <iostream>
#include <vector>
#include <string>
#include <link.h>
#include <climits>
#include <dlfcn.h>

using namespace std;

template<typename Fn>
#if defined __cpp_concepts
requires requires( Fn fn, dl_phdr_info *image, size_t n ) { { fn(
image, n ) } -> same_as<int>; }
#endif
int dlIteratePhdr( Fn fn )
{
return dl_iterate_phdr(
[]( dl_phdr_info *image, size_t size, void *pFn ) -> int
{
return (*(Fn *)pFn)( image, size );
}, &fn );
};

int main()
{
size_t nImages = 0;
dlIteratePhdr( [&]( dl_phdr_info *, size_t ) -> int { ++nImages; return
0; } );
vector<string> images;
images.reserve( nImages );
if( dlIteratePhdr(
[&]( dl_phdr_info *image, size_t ) -> int
{
try
{
images.emplace_back( image->dlpi_name );
return 0;
}
catch( bad_alloc const & )
{
return 1;
}
} ) )
return EXIT_FAILURE;
for( string const &image : images )
cout << "\"" << image << "\"" << endl;
}

Is das nicht geil ? Kein Gefledder mit globalen Funktionen mehr !

0 new messages