Petit problème de classe foncteur template
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:
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:
1 2
|
main.cpp:26: error: conversion from int (*)(char) to non-scalar type Function<int(char)> requested |
main.cpp:
Code:
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:
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 |