【建议】新增一个@sn<特定名称>
调用该嵌入式方法时提供的调用对象的类名简单来说 即decltype(@sn<this>) 的结果类型
可以命名为@sn<this_class>
---------------------------------------
另 嵌入式方法 为什么还不支持重复使用@sn<this>, @飞扬工作室来解释下
@sn<current_class>
宏扩展多次会导致语法故障 飞扬工作室 发表于 2023-1-2 16:27
@sn
宏扩展多次会导致语法故障
@sn<current_class>和@sn<current_class_def>等等都不行 ,需求是要求取嵌入式方法所在类的子类调用方的类名
使用场景有点特殊:
父类(禁止创建对象)里新建了一个嵌入式方法,该嵌入式方法必须由其子类调用,并且该嵌入式方法必须调用子类的静态方法 ,
每个子类都有(同名)静态方法 (为什么不把静态方法放 父类里? 因为静态方法需要嵌入子类指针)
---
有偷懒的意思, 如果在每个子类里都复制粘贴该嵌入式方法也可以
场景用途是 封界面库组件父类对应窗口组件子类对应具体组件每次新增组件都复制 有点麻烦
在静态嵌入式方法中用 @pdt 取调用参数的数据类型即可 本帖最后由 609177738 于 2023-1-3 00:23 编辑
飞扬工作室 发表于 2023-1-2 22:59
在静态嵌入式方法中用 @pdt 取调用参数的数据类型即可
没有参数啊是取子类对象的数据类型啊
class窗口组件//禁止创建对象
{
void 嵌入式方法A() //火山代码不能复制 ,象征性表达下意思
{
fun(@sn<this>.Getmydata(), 子类数据类型::静态方法 )//这里需求是decltype((@sn<this>)的数据类型
}
}
//-----------------------假定一个 名为"按钮EX "的窗口组件的子类
class按钮EX : public 窗口组件
{
static void 静态方法 ();
}
void@sn<current_class>::静态方法 ()//静态方法的参数不涉及火山的数据类型
{
@sn<current_class>* ptr = .....;//这里不能是 窗口组件*必须是窗口组件的子类*
}
静态方法的代码是写在宏里面的 所以不用手动复制粘贴而嵌入式方法A是火山的程序 不能写在宏里面除非每个窗口组件子类都手动复制粘贴一遍 嵌入式方法A()
--------------
那么火山在子类的对象 调用嵌入式方法时:
按钮EX 对象A;
对象A.嵌入式方法A() //对应生成的c++代码必须是 fun (对象A, 按钮EX::静态方法 )
而 @sn<current_class> 生成的c++代码是fun (对象A,窗口组件::静态方法 )
其他的就更不行了
页:
[1]