Salut à tous,

Je me suis embarqué dans un système assez complexe de template, et je me heurte à un mur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27
28
#include <iostream>
 
template<template<int, int> class Test1>
struct Test2
{
  static void run()
  {
    Test1<1, 1>::print();
  }
};
 
template<class Nothing>
struct Test3
{
  template<int di, int dk>
  struct Test4
  {
    static void print()
    {
      std::cout << di * dk << std::endl;
    }
  };
};
 
int main(int argc, char** argv)
{
  Test2<Test3<float>::Test4<1, 1> >::run();
}
Le résultat est :
test.cpp: In function `int main(int, char**)':
test.cpp:28: error: type/value mismatch at argument 1 in template parameter list for `template<template<int <anonymous>, int <anonymous> > class Test1> struct Test2'
test.cpp:28: error: expected a class template, got `Test3<float>::Test4<1, 1>'
test.cpp:28: error: invalid type in declaration before ';' token
La question est que mettre comme paramètre template pour Test2 afinq u'il reconnaisse l'utilisation de la structure imbriquée TesT4.

Pour le moment, je n'ai pas trouvé plus simple : Test4 est en fait une structure permettant de calculer des différences finies 2D, Test3 est la classe parente définissant le type de calcul, et Test2 est la classe effectuant une mise à jour en différence finie.