Ik heb een signal / slot library gemaakt voor C++ en ben nog bezig om wat laatste kreukjes eruit te strijken.
Een van de issues die mij op het moment het meest stoort is het volgende:
niet zo netjes aangezien er een const variabele is aangepast.
Het probleem ontstaat omdat ik in de emit call de adressen van de argumenten wil opslaan. Dit doe ik door een const reference te nemen van de argumenten, waar ik vervolgens het adres van pak. Door deze const reference kan ik echter niet afleiden of het argument startte als een const of non-const object.
Als ik echter de template herschrijf zodat deze een non-const reference accepteert dan heb ik het probleem dat hij een r-value niet accepteert en dat kan natuurlijk ook niet de bedoeling zijn
Dus de open vraag: hoe zou ik dit kunnen oplossen?
alvast bedankt!
De code is te vinden op: git://houbenweb.nl/SAS
(Zodra ik tevreden ben over het geheel maak ik een project pagina met documentatie)
Een van de issues die mij op het moment het meest stoort is het volgende:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| #include <sas/slot> #include <sas/signal> #include <string> #include <iostream> void test( std::string &str ) { std::cerr << &str << std::endl; std::cerr << str << std::endl; str = "woei"; std::cerr << str << std::endl; } int main() { sas::signal signal; const std::string aap( "aap" ); signal.connect( test, "mijnVar" ); signal.emit( "mijnVar", aap ); std::cerr << &aap << std::endl; std::cerr << aap << std::endl; } |
00CAFCB0 aap woei 00CAFCB0 woei
Het probleem ontstaat omdat ik in de emit call de adressen van de argumenten wil opslaan. Dit doe ik door een const reference te nemen van de argumenten, waar ik vervolgens het adres van pak. Door deze const reference kan ik echter niet afleiden of het argument startte als een const of non-const object.
Als ik echter de template herschrijf zodat deze een non-const reference accepteert dan heb ik het probleem dat hij een r-value niet accepteert en dat kan natuurlijk ook niet de bedoeling zijn
Dus de open vraag: hoe zou ik dit kunnen oplossen?
alvast bedankt!
De code is te vinden op: git://houbenweb.nl/SAS
(Zodra ik tevreden ben over het geheel maak ik een project pagina met documentatie)
[ Voor 10% gewijzigd door Arjan op 19-05-2011 12:02 ]
oprecht vertrouwen wordt nooit geschaad