http://www.codeproject.com/KB/cpp/CppDelegateImplementation.aspx?fid=420921&fr=11#xx0xx
看了这篇文章之后,编译了一下,报错,错误信息如题
test.cpp:37:1: pasting "," and "typename" does not give a valid preprocessing token做了个简单的测试,代码如下:/*
定义不同的数字可以使下面的someStruct的() 里支持不同的参数个数
比如这里定义成2,下面的Some类就相当于
struct Some {
template<typename A1, typename A2>
struct someStruct {
void operator() (A1 a1, A2 a2) const {
}
};
}; 如果这里定义成3,下面的Some类就相当于
struct Some {
template<typename A1, typename A2, typename A3>
struct someStruct {
void operator() (A1 a1, A2 a2, A3 a3) const {
}
};
};
*/
#define PARAM_COUNT 2 #define COMPILE_TIME_JOIN(X, Y) X##Y#define MAKE_PARAMS1_2(t) t##1, ##t##2
#define MAKE_PARAMS2_2(t1, t2) t1##1 t2##1, t1##2 t2##2#define PARAMS MAKE_PARAMS2(PARAM_COUNT,A,a)#define MAKE_PARAMS1(n, t) COMPILE_TIME_JOIN(MAKE_PARAMS1_, n) (t)
#define MAKE_PARAMS2(n, t1, t2) COMPILE_TIME_JOIN(MAKE_PARAMS2_, n) (t1, t2)#define TEMPLATE_PARAMS MAKE_PARAMS1(2, typename A)struct Some {
template<TEMPLATE_PARAMS>
struct someStruct {
void operator() (PARAMS) const {
}
};
};int main() { return 0;
}
请问是啥道理
看了这篇文章之后,编译了一下,报错,错误信息如题
test.cpp:37:1: pasting "," and "typename" does not give a valid preprocessing token做了个简单的测试,代码如下:/*
定义不同的数字可以使下面的someStruct的() 里支持不同的参数个数
比如这里定义成2,下面的Some类就相当于
struct Some {
template<typename A1, typename A2>
struct someStruct {
void operator() (A1 a1, A2 a2) const {
}
};
}; 如果这里定义成3,下面的Some类就相当于
struct Some {
template<typename A1, typename A2, typename A3>
struct someStruct {
void operator() (A1 a1, A2 a2, A3 a3) const {
}
};
};
*/
#define PARAM_COUNT 2 #define COMPILE_TIME_JOIN(X, Y) X##Y#define MAKE_PARAMS1_2(t) t##1, ##t##2
#define MAKE_PARAMS2_2(t1, t2) t1##1 t2##1, t1##2 t2##2#define PARAMS MAKE_PARAMS2(PARAM_COUNT,A,a)#define MAKE_PARAMS1(n, t) COMPILE_TIME_JOIN(MAKE_PARAMS1_, n) (t)
#define MAKE_PARAMS2(n, t1, t2) COMPILE_TIME_JOIN(MAKE_PARAMS2_, n) (t1, t2)#define TEMPLATE_PARAMS MAKE_PARAMS1(2, typename A)struct Some {
template<TEMPLATE_PARAMS>
struct someStruct {
void operator() (PARAMS) const {
}
};
};int main() { return 0;
}
请问是啥道理
解决方案 »
- [求教]dll里含多个函数是否正确
- VC里的如何实现“撤销”功能
- SDI ID_FILE_NEW 消息疑问
- 什么样的口令是弱口令?
- 单位的老破笔记本电脑又出问题了,打开word或者excel的时候看不到言语设置工具条?我把IME属性设置成显示工具条也不灵。该怎么办?
- 激光打印机不支持StretchBlt()函数,VC中如何实现打印呀?
- 如何使用SetDIBitsToDevice将图片显示到dialog上?????
- [WINSDK]有没有办法实现MFC窗口类的SetOwner()
- 刚做了一个简单的word报表打印类,拿出共享;请大家帮忙看看这个类有一个资源没有被释放,但是我找不到是什么地方没释放。
- VC多语种软件开发(多个RC资源文件)问题
- CAsyncSocket
- 如何获得windows桌面的dc
#define MAKE_PARAMS1_2(t) t##1, ##t##2改成
#define MAKE_PARAMS1_2(t) t##1, t##2就能编译了, 这的确是个多余的##, 但vc6下编译通过,看来g++还是更严格一些