boost::function, using undefined class?

Hello, I'm having an issue with boost::function in Visual Studio.NET 2005. In the following program: #include <boost/function.hpp> void SomeFunc(int* Blah) { //DoSomething } int __cdecl main(int argc, char* argv[], char* envp[]) { boost::function<void(*)(int*)> MyFunc; } I get the following error message: (Project Directory)\boostfunctest.cpp(11) : error C2079: 'MyFunc' uses undefined class 'boost::function' with [ Signature=void (__stdcall *)(int *) ] If I leave off the "(*)" it will compile, but this is just a simplified version of my real problem. The main reason this is a concern is I have a templated function that looks like this: template<typename Signature> boost::function<Signature> GetFunction(Signature ToCall); Which I intend to use to record and "play back" certain function calls. However, when it sees the signiture from the function pointer, it ALWAYS sees it as 'void(*)(int*)' (for example), rather than 'void(int*)' and fails to compile. For example, the following program: #include <boost/function.hpp> void SomeFunc(int* Blah) { //DoSomething } template<typename Signature> boost::function<Signature> GetFunction(Signature ToCall) { //TODO: Check if function is in list, add it to list, etc. return boost::function<Signature>(ToCall); } int __cdecl main(int argc, char* argv[], char* envp[]) { GetFunction(SomeFunc); } I get: (Project Directory)\boostfunctest.cpp(17) : error C2027: use of undefined type 'boost::function' with [ Signature=void (__stdcall *)(int *), Allocator=std::allocator ] So, anyone have any idea what's wrong and how to fix it? Thanks for any help. Note: I am compiling with /Gz, but compiling with /Gd and /Gr merely changes the "__stdcall" to "__cdecl" and "__fastcall" in the error messages, respectively, so it does not seem to matter which calling convention is used. -- Erzengel des Lichtes 光の大天使 (Hikari no Daitenshi) Archangel of Light

AMDG Erzengel Des Lichtes wrote:
int __cdecl main(int argc, char* argv[], char* envp[]) { boost::function<void(*)(int*)> MyFunc; }
I get the following error message:
(Project Directory)\boostfunctest.cpp(11) : error C2079: 'MyFunc' uses undefined class 'boost::function' with [ Signature=void (__stdcall *)(int *) ]
boost::function requires a function signature. If you have a function pointer, you need to use #include <boost/type_traits/remove_pointer.hpp> template<class FunctionPointerType> void foo() { boost::function<typename boost::remove_pointer<FunctionPointerType>::type> f; } In Christ, Steven Watanabe

Ah, I see. That does make sense, in the twisted way C++ tends to. Thank you, it is working now. That was tremendously frustrating... On Wed, Jul 30, 2008 at 5:15 PM, Steven Watanabe <watanabesj@gmail.com> wrote:
AMDG
Erzengel Des Lichtes wrote:
int __cdecl main(int argc, char* argv[], char* envp[]) { boost::function<void(*)(int*)> MyFunc; }
I get the following error message:
(Project Directory)\boostfunctest.cpp(11) : error C2079: 'MyFunc' uses undefined class 'boost::function' with [ Signature=void (__stdcall *)(int *) ]
boost::function requires a function signature. If you have a function pointer, you need to use
#include <boost/type_traits/remove_pointer.hpp>
template<class FunctionPointerType> void foo() { boost::function<typename boost::remove_pointer<FunctionPointerType>::type> f; }
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Erzengel des Lichtes 光の大天使 (Hikari no Daitenshi) Archangel of Light
participants (2)
-
Erzengel Des Lichtes
-
Steven Watanabe