宏里面不支持模板的使用的。具体看看本文就了解了
void say(int a)
{
std::cout << a << std::endl;
}
#define TEST_MACRO(n) say(n)
template <class R, class B>
class Test_Template
{
public:
static const int a = 10;
};
int _tmain(int argc, _TCHAR* argv[])
{
// TEST_MACRO(Test_Template<int,int>::a);
// error the comma, because preprocessor can not deal with
// the template argument in macro
TEST_MACRO((Test_Template<int,int>::a));
return 0;
}
其中注释掉的地方属于错误的,错误的原因是,宏不支持模板,会错把模板中的逗号认为是宏的不同参数,
解决的办法加上一个括号就可以了