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 :
et utilisée ainsi :
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);
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 f('c');
Voici l'erreur :
main.cpp:
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
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 #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; }
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
Partager