Bonjour,

Je travaille sous fedora R.13 avec g++ 4.4.5-2.

Je souhaite réaliser une classe qui supporte une initialisation comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Function<int(char)> f = &function;
Function<int(char)> f = boost::bind(&function, _1);
et utilisée ainsi :
J'ai commencé à dèvelopper la classe Function, son code se trouve plus bas, mais je bloque sur une erreur. Pourriez vous m'aider s'il vous plait ?

Voici l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
main.cpp:26: error: conversion from ‘int (*)(char)’ to non-scalar type ‘Function<int(char)>’ requested
main.cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include "Function.hpp"
int funct1(char c)
{
  std::cout << c << std::endl;
   return 0;
 }
 
 int main()
 {
  Function<int (char)> f = &funct1;
  f('c');
  return 0;
 }
Function.hpp:
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
29
30
31
#ifndef __ETAPE2_FUNCTION__
 #define __ETAPE2_FUNCTION__
 
 template <typename T>
class Function;
 
 template <typename T, typename P1>
class Function<T(P1)>
 {
   typedef int (*ptr)(P1);
 public:
   Function() : _o()
  {
   }
 
   int           operator()(P1 const& p)
  {
     return _o(p);
   }
 
   Function<T(P1)>&      operator=(int (*n)(P1))
   {
    _o =  n;
    return *this;
  }
 
 private:
 ptr           _o;
};
 
#endif