Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble with template parameters used in macros

I'm trying to compile the following piece of code, I get an error on the line which specializes std::vector, it seems the one parameter being passed-in is somehow being assumed to be two parameters. Is it perhaps something to do with angle-brackets?

Is there a special way/mechanism where by such parameters can be correctly passed to the macro?

#include <vector>

template<typename A>
struct AClass {};

#define specialize_AClass(X)\
template<> struct AClass<X> { X a; };


specialize_AClass(int) //ok

specialize_AClass(std::vector<int,std::allocator<int> >) //error

int main()
{
   return 0;
}

The error that I get is as follows:

1 Line 55: error: macro "specialize_AClass" passed 2 arguments, but takes just 1
2 Line 15: error: expected constructor, destructor, or type conversion before 'int'
3 compilation terminated due to -Wfatal-errors.

Link: http://codepad.org/qIiKsw4l


1 Answers

template<typename TypeX, typename TypeY>
class Test
{
public:
    void fun(TypeX x, TypeY y)
    {
        std::wcout << _T("Hello") << std::endl;
        std::wcout << x << std::endl;
        std::wcout << y << std::endl;
    }
};

#define COMMA ,

#define KK(x) x val;

void main()
{
    KK(Test<int COMMA int>);
    val.fun(12, 13);
}

I have a new way to solve this trouble. hope it can help you :)

like image 116
calmman Avatar answered Sep 08 '25 00:09

calmman