宏中使用的模板参数有问题

新手上路,请多包涵

我正在尝试编译以下代码,在专门用于 std::vector 的行上出现错误,似乎传入的一个参数以某种方式被假定为两个参数。可能与尖括号有关吗?

是否有一种特殊的方式/机制可以将这些参数正确传递给宏?

 #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;
}

我得到的错误如下:

 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.

链接: http ://codepad.org/qIiKsw4l

原文由 Matthieu N. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
1 个回答
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 COMMOA ,

#define KK(x) x val;

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

我有一个新的方法来解决这个麻烦。希望它可以帮助你:)

原文由 calmman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏