How do I store a function to a variable?

前端 未结 7 1897
灰色年华
灰色年华 2020-12-08 08:36

I think they are called functors? (it\'s been a while)

Basically, I want to store a pointer to a function in a variable, so I can specify what function I want to use

7条回答
  •  不思量自难忘°
    2020-12-08 09:02

    The simplest you can do is

    unsigned int (*pFunc)(unsigned int) = func_1;
    

    This is a bare function pointer, which cannot be used to point to anything other than a free function.

    You can make it less painful if your compiler supports the C++0x auto keyword:

    auto pFunc = func_1;
    

    In any case, you can call the function with

    unsigned int result = pFunc(100);
    

    There are many other options that provide generality, for example:

    • You can use boost::function with any C++ compiler
    • With a compiler implementing features of C++0x you can use std::function

    These can be used to point to any entity that can be invoked with the appropriate signature (it's actually objects that implement an operator() that are called functors).

    Update (to address updated question)

    Your immediate problem is that you attempt to use Config::current_hash_function (which you declare just fine) but fail to define it.

    This defines a global static pointer to a function, unrelated to anything in class Config:

    unsigned static int (*current_hash_function)(unsigned int) = kennys_hash_16;
    

    This is what you need instead:

    unsigned int (*Config::current_hash_function)(unsigned int) = kennys_hash_16;
    

提交回复
热议问题