KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I would like to pass a function as a template argument to another function so that it can be stored and called back later. In some cases, I want to pass NULL for the call back, but I'm having trouble. Here's an example of what I'd like to be able to do: #include <iostream> struct Foo { int i; }; template <typename T> T* T_new() { return new T(); } Foo* Foo_new() { return new Foo(); } template <typename T, T* (*func)()> T* T_new() { if (func) return func(); else return NULL; } int main(void) { // Works Foo* f1 = T_new<Foo>(); std::cout << f1 << std::endl; // Works Foo* f2 = T_new<Foo, Foo_new>(); std::cout << f2 << std::endl; // fails to compile, "no matching function for call to ‘T_new()’" // Foo* f3 = T_new<Foo, NULL>(); // std::cout << f3 << std::endl; return 0; } I found this similar question, but that deals with passing null as an argument to the constructor, not passing null as a template argument, and the trick there (using (Foo*)0 ) doesn't work as a template argument. Is there a way to work around this or do some tricky template specialisation or some other clever thing to get the desired effect? EDIT: The above was a simplified example that illustrated the problem I was having, but here's the concrete problem I'm trying to solve. I have this project I'm working on. This is a set of functions that make mixing C++ and Lua simpler for me (For various reasons I don't want to use LuaBind or the other existing functions I've found out there). The important function to this question is luaW_register<T&
Tags (comma-separated)
Save Edits
Cancel