2017-05-30 1 views
1

Je voudrais définir une fonction via un typedef et en passant le bon type lors de l'appel. Quelque chose comme ceci:Dart: typedef avec les génériques ne semble pas fonctionner

typedef testFn<T>(); 

main() { 
    testFn tester; 
    tester = testerFn; 
    tester<int>(); // Error: The method '() → dynamic' is declared with 0 type parameters, but 1 type arguments were given. 
} 

testerFn<T>() {//Do something} 

Je ne sais pas si ce un bug ou non, mais, de toute façon, comment je pourrais-je résoudre quelque chose comme ça?

Répondre

2

Semble familier avec Dart List - filter on sub type

Alors peut-être une construction en enveloppant avec une classe pourrait résoudre votre cas.

typedef testFn<T>(); 

class TestF<T> { 
    final testFn _f; 
    const TestF(final testFn this._f); 
    eval() => _f(); 
} 

testerFn<T>() { 
    print('testFn!'); 
} 

main() { 
    TestF<int> c = const TestF(testerFn); 
    c.eval(); 
} 

En fait, dans le code d'origine, si la fonction est déclarée avec un prescripteur int cela fonctionnera.

typedef testFn<T>(); 

main() { 
    testFn<int> tester; 
    tester = testerFn; 
    tester(); 
} 

testerFn<T>(){ 
    print('testerFn!'); 
} 
+0

Merci Jonas. J'ai fait une petite modification: 'typedef testFn (valeur T); classe TestF { test finalFn _f; const TestF (test finalFn this._f); eval (valeur T) => _f (valeur); } testerFn (valeur T) { print ('testFn! $ {Value.toString()}'); } main() { TestF c = const TestF (testerFn); c.eval (9); } ' Mon but était d'éviter la possibilité de transmettre une mauvaise variable à la fonction. Maintenant, si je change le code à 'c.eval ('pas OK'),' j'obtiens une erreur. Donc, votre solution fonctionne! –

+0

Génial. Cette solution n'est pas évidente, mais j'avais un problème familier comme vous voyez :-) Stackoverflow a un système pour marquer les questions résolues. À gauche de la réponse, il y a une coche, vous pouvez marquer si vous la considérez comme résolue. –

+0

Jonas, penses-tu que le problème que j'ai écrit est un bug Dart ou est-ce moi qui manque quelque chose? –