J'essaie de définir une construction récursive comme une tâche agricole. Ici, j'essaie de trouver deux opérandes qui peuvent fonctionner récursivement pour n'importe quel nombre d'opérandes car il peut s'emboîter lui-même.Détection automatique C++ des arguments de modèle?
template <typename T1, typename T2>
class Farm
{
private:
T1 *task1;
T2 *task2;
public:
// save them so that I can use them when invoking call operator
Farm(T1 *_t1, T2 *_t2): task1(_t1), task2(_t2) { }
void operator()()
{
// invoke call operator, meaning a farm could be a task (arbitrary nesting)
(*task1)();
(*task2)();
}
};
int main()
{
... create two pointer(A *a, B *b...)
Farm(a,b); // error: missing template arguments before ‘(’ token
Farm<A, B>(a,b); // in this works, it works
}
Le problème est avec l'auto-détection des arguments de modèle qui ne fonctionne pas dans ce cas. Qu'est-ce que je fais mal et comment pourrais-je réaliser ce paramètre de paramètres de détection implicite par le compilateur gcc.
Merci!
Exactement. C'est ce qu'on appelle le langage Object Generator: http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Object_Generator – ltjax
Merci beaucoup pour votre réponse! Mais pourriez-vous me dire comment je peux mettre cette _Farm_ à l'échelle pour travailler avec des arguments arbitraires (en utilisant des templates variadiques C++ 0x et éventuellement des tuples). J'ai lu beaucoup et essaye de le faire mais n'ai pas pu trouver une solution. – usman
@ user600029: C'est une question différente. Veuillez le rechercher (ou postez une nouvelle question). Personnellement, je n'ai pas assez utilisé C++ 0x pour vous aider, mais je suis sûr qu'il y en a beaucoup d'autres ici qui savent comment le faire correctement. – Macke