Bonjour.

J'ai récemment écrit la classe de wrapper simple suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
template <class Wrapped>
class Wrapper : public Wrapped
{
  public:
  Wrapper():Wrapped(){}
  template <class T>
  Wrapper(T t):Wrapped(t)
  {
     char u;//juste pour déclencher un warning. 
  }
};
j'essaye ensuite d'exécuter ce code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
int main()
{
  std::string s;
  char f[32]="dummy"
  Wrapper<std::string> u(s);
  Wrapper<std::string> v("foo");
  Wrapper<std::string> w(f);
}
quand je regarde le message du compilo, j'ai:
Citation Envoyé par gcc 4.4.1
-------------- Build: Debug in Boost_Serialize_Test ---------------

Compiling: main.cpp
/.../main.cpp: In constructor ‘Wrapper<Wrapped>::Wrapper(T) [with T = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Wrapped = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]’:
/.../main.cpp:103: instantiated from here
/.../main.cpp:39: warning: unused variable ‘u’
/.../main.cpp: In constructor ‘Wrapper<Wrapped>::Wrapper(T) [with T = const char*, Wrapped = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]’:
/.../main.cpp:104: instantiated from here
/.../main.cpp:39: warning: unused variable ‘u’
/.../main.cpp: In constructor ‘Wrapper<Wrapped>::Wrapper(T) [with T = char*, Wrapped = std::basic_string<char, std::char_traits<char>, std::allocator<char> >]’:
/.../main.cpp:105: instantiated from here
/.../main.cpp:39: warning: unused variable ‘u’
Linking console executable: bin/Debug/Boost_Serialize_Test
Output size is 252,76 KB
Process terminated with status 0 (0 minutes, 7 seconds)
0 errors, 4 warnings
La partie en rouge montre que le constructeur prend pour string un passage par valeur... or j'aimerais bien avoir, dans ce cas, un passage par référence de type const std::string &...

il faudrait pour cela spécialiser le template, je suppose sur un critère de taille du parametre wrapped. Je me souviens avoir déjà vu ce genre de bout de code sur le forum, mais impossible de le retrouver ... si vous savez ou le trouver ou comment faire , merci d'avance