Can I use (boost) bind with a function template?

后端 未结 2 498
花落未央
花落未央 2020-12-06 17:24

Is it possible to bind arguments to a function template with (boost) bind?

// Define a template function (just a silly example)
template

        
相关标签:
2条回答
  • 2020-12-06 17:49

    It seems to work if you create a function reference:

    int (&fun)(int, int) = FCall2Templ;
    int res2 = boost::bind(fun, 42, 56)();
    

    Or:

    typedef int (&IntFun)(int, int);
    int res3 = boost::bind(IntFun(FCall2Templ), 42, 56)();
    

    (Tested on GCC)

    0 讨论(0)
  • 2020-12-06 17:57

    I don't think so, only because boost::bind in this case is looking for a function pointer, not a function template. When you pass in FCall2Templ<int, int>, the compiler instantiates the function and it is passed as a function pointer.

    However, you can do the following using a functor

    struct FCall3Templ {
    
      template<typename ARG1, typename ARG2>
      ARG1 operator()(ARG1 arg1, ARG2 arg2) {
        return arg1+arg2;
      }
    };
    int main() {
      boost::bind<int>(FCall3Templ(), 45, 56)();
      boost::bind<double>(FCall3Templ(), 45.0, 56.0)();
      return 0;
    }
    

    You have to specify the return type, since the return type is tied to the inputs. If the return doesn't vary, then you can just add typedef T result_type to the template, so that bind can determine what the result is

    0 讨论(0)
提交回复
热议问题