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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…