Generating functions with macros in C++
c++, function, macros, templates
Solution
You want
T FNAME (const T& t) \
`##` concatenates, you don't want to concatenate.
Problem
I have the following macro that is intended to generate functions in the current scope or namespace: ``` #define MAKE_FUNC(FNAME) \ template <typename T> \ T ##FNAME## (const T& t) \ {\ return t; \ } MAKE_FUNC(foo) MAKE_FUNC(boo) int main() { foo(1); boo(2); } ``` The following is the error message when compiling the above code: ``` prog.cpp:8:1: error: pasting "Tfoo" and "(" does not give a valid preprocessing token prog.cpp:9:1: error: pasting "Tboo" and "(" does not give a valid preprocessing token prog.cpp:8: error: ISO C++ forbids declaration of ‘Tfoo’ with no type prog.cpp:9: error: ISO C++ forbids declaration of ‘Tboo’ with no type prog.cpp: In function ‘int main()’: prog.cpp:13: error: ‘foo’ was not declared in this scope prog.cpp:14: error: ‘boo’ was not declared in this scope ``` http://ideone.com/paiu1 It seems like the concatenation has fail, is there anyway around this problem?