社区
C++ 语言
帖子详情
关于宏定义的一个问题
mountlin
2005-01-23 02:33:05
#define M(x) x::f()
如果我这样用M(C<T1,T2>),编译不通过,告诉我M接受的参数多了,C<T1,T2>被当成了两个参数。而如果用M((C<T1,T2>)),编译又会告诉我C<T1,T2>是抽象类,不能实例化。C<T1,T2>的确是抽象类,但我是在C<T1,T2>的派生类中用的M宏,如果直接写C<T1,T2>::f()是没问题的,是因为(<T1,T2>):f()多了()造成了别的含义?
不知道有没有说清。请问各位大虾,这个问题该怎样解决?
...全文
138
7
打赏
收藏
关于宏定义的一个问题
#define M(x) x::f() 如果我这样用M(C),编译不通过,告诉我M接受的参数多了,C被当成了两个参数。而如果用M((C)),编译又会告诉我C是抽象类,不能实例化。C的确是抽象类,但我是在C的派生类中用的M宏,如果直接写C::f()是没问题的,是因为():f()多了()造成了别的含义? 不知道有没有说清。请问各位大虾,这个问题该怎样解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunwt
2005-01-23
打赏
举报
回复
typedef即可
playmud
2005-01-23
打赏
举报
回复
#include <iostream>
#define M( x ) x::f()
using namespace std;
template<typename T,typename T2>
class B1
{
public:
int m_dwRef;
int f(){cout<<"hello world"<<endl;};
};
int main()
{
B1<int,char> a;
typedef B1<int,char > ss;
M( a.ss );
system("pause");
}
搞定了,呵呵。
playmud
2005-01-23
打赏
举报
回复
偶理解错了。
playmud
2005-01-23
打赏
举报
回复
#include <iostream>
#define M(x) x::f()
using namespace std;
template<typename T>
class B1
{
public:
int m_dwRef;
int f(){cout<<"hello world"<<endl;};
};
int main()
{
B1<int> a;
M(a.B1<int>);
system("pause");
}
看来不应该不是写法的问题。
useresu
2005-01-23
打赏
举报
回复
想了一下,感觉是宏定义不支持这样定义吧,
直接写C<T1,T2>::f()当然是没问题的。
useresu
2005-01-23
打赏
举报
回复
不太明白,为了类型的安全性,宏这东西能少用,就少用,难道模板解决不了问题吗?
idler
2005-01-23
打赏
举报
回复
mark&up
《C深度解析》第二章 C预编译——
宏定义
、条件编译、头文件包含、特殊预编译关键字
课程内容: (1)回顾c预编译 (2)
宏定义
:无宏体宏、有宏体宏、带参宏、
宏定义
与复杂表达式。 (3)条件编译:#if、#else、#elif #endif、#ifdef和#ifndef、#if与defined、条件编译与配置文件 (4)一些特殊的预...
python
宏定义
_
宏定义
(无参
宏定义
和带参
宏定义
),C语言
宏定义
详解
宏定义
是比较常用的预处理指令,...无参
宏定义
无参数
宏定义
的格式为:#define 标识符 替换列表替换列表可以是数值常量、字符常量、字符串常量等,故可以把
宏定义
理解为使用标识符表示一常量,或称符号常量。说明:1)...
宏定义
是什么?为什么要进行
宏定义
?
宏定义
的格式
宏定义
是C语言提供的三种预处理功能的其中一种,这三种预处理包括:
宏定义
、文件包含、条件编译。
宏定义
和操作符的区别:
宏定义
是替换,不做计算,也不做表达式求解。
宏定义
又称为宏代换、宏替换,简称“宏”。在 ...
【C语言】
宏定义
宏定义
允许嵌套,
一个
宏定义
里可以有其他
宏定义
,如: #define NUM_N NUM+1234 其中NUM为上文定义的NUM。 二、
宏定义
作用域
宏定义
的作用域从 #define 定义处开始到 #undef 处结束;如: ...
关于
宏定义
的计算
问题
比如呢,这里给出
一个
简单的
宏定义
define A ((((1*2)+3)*4)+5)假如在程序中用呢,就是 uint32_t data = A;
宏定义
就是简单的替换 所以呢就变成了 uint32_t data = ((((1*2)+3)*4)+5); 其实最终呢咱们想要的是 ...
C++ 语言
64,683
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章