Yo people!
I'm playing around with the Visual Studio C++ Nov CTP compiler and came up with an interesting implementation of what ended up being std::ptr_fun (Still working on the return type), but with no need to declare template arguments explicitly. What's your opinion about this implementation?
Edit: I do know about auto, but let's forget about that for a sec!
I'm playing around with the Visual Studio C++ Nov CTP compiler and came up with an interesting implementation of what ended up being std::ptr_fun (Still working on the return type), but with no need to declare template arguments explicitly. What's your opinion about this implementation?
#include <utility>
#include <iostream>
#include <string>
#include <functional>
class C {
void* f;
public:
C(void* g) : f(g) { }
template<typename... Args>
void operator()(Args&&... args) {
typedef void (*F)(Args...);
//Perfect forwarding to f
((F)f)(std::forward<Args>(args)...);
}
};
void g(int i, const std::string& s) {
std::cout << i << ' ' << s << std::endl;
}
int main() {
std::string s = "abc";
//No template stuff
C c = g;
c(2, s);
//Ugly template stuff
std::pointer_to_binary_function<int, const std::string&, void> f = std::ptr_fun(g);
f(2, s);
return 0;
}
Edit: I do know about auto, but let's forget about that for a sec!