(对于长标题道歉,但我想不出一个不那么明确的标题)
我需要将(类似对象)宏的名称传递给嵌套(类似函数)的宏,如下面的(普通)示例所示:
#define ROOT_FUNC(INPUT) int v_ ## INPUT = INPUT
#define CALLER_FUNC(INPUT) ROOT_FUNC(INPUT)
#define INTA 1
#define INTB 2
#define INTC 3
Run Code Online (Sandbox Code Playgroud)
现在,如果我ROOT_FUNC(INTA);在我的代码中写入,我会得到一个v_INTA用值调用的整数变量1.如果我在代码中定义一个变量int INTD = 4;,然后写,CALLER_FUNC(INTD);我最后得到一个v_INTD用值调用的整数变量4.
但是,如果我写,CALLER_FUNC(INTA);我得到一个名为v_1值的整数变量1,因为INTA扩展到1当时CALLER_FUNC是扩展的,之前ROOT_FUNC是扩展的(即ROOT_FUNC(1)扩展的内容).
如果我将第2行更改为:( #define CALLER_FUNC(INPUT) ROOT_FUNC(#INPUT)即字符串化INPUT),则会发生编译器错误,因为要求它定义一个名为v_"1"(无效名称)的整数变量并为其赋值"1"(非整数值).
我知道预处理器是相当原始的,但有没有办法实现我追求的目标?
(第二次编辑为了进一步说明,我想CALLER_FUNC(INTA);首先扩展ROOT_FUNC(INTA);,然后到int v_INTA = 1;- 即我想 …
我正在开发一个“动态快捷方式”应用程序,它创建指向注册表项而不是实际文件/可执行文件的特殊快捷方式文件。注册表项包含所需文件的路径。我想要运行一个守护进程,它监视链接到的文件,并在移动或重命名它们时更新它们的注册表项。重命名后我可以使用 System.IO.FileSystemWatcher 进行处理,但是处理移动文件的最佳方法是什么?
我知道这超出了 FSW 的基本功能(尽管是低级文件系统操作)。问题是,最好的方法是什么?
我读过的大多数帖子/文章都提出了感觉完全“hacky”的方法,这些方法基本上涉及寻找删除,然后在文件的新位置创建,并通过文件大小、元数据、文件之间的时间连接两者。删除/创建触发器、哈希等。这很可能是我必须采用的方法,在所有驱动器上设置 FSW。不过,我希望可能有更好的方法。
是否可以:
2.1. 监听 shell 并“听到”移动操作?
2.2 或者(甚至更激进)替换或添加一些东西到 shell 移动操作中,触发某种事件或执行注册表更新任务本身,从而消除对守护程序的需要?
我有一种感觉,每个人都会告诉我 1. 是唯一的课程,但我期待您的建议。(首选 VB.NET 中的答案,但如果需要,可以从 C# 进行翻译)。