在Delphi中,IUnknown声明为:
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
Run Code Online (Sandbox Code Playgroud)
注意:输出参数是无类型的
在我的TInterfacedObject后代我需要处理QueryInterface,所以我可以返回一个支持所请求的接口的对象:
function TFoo.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
if IsEqualGUID(IID, IFooBar) then
begin
Obj := (TFooBar.Create(Self) as IFooBar);
Result := S_OK;
end
else
Result := inherited QueryInterface(IID, {out}Obj);
end;
Run Code Online (Sandbox Code Playgroud)
问题就出现了:
Obj := (TFooBar.Create(Self) as IFooBar);
Run Code Online (Sandbox Code Playgroud)
德尔福抱怨:
运算符不适用于此操作数类型
显然我不知道如何或分配给无类型 out参数.我可以随意尝试,希望编译器停止抱怨:
Obj := TFooBar.Create(Self);
Obj := Pointer(TFooBar.Create(Self));
Obj := Pointer(TFooBar.Create(Self) as IFooBar);
Run Code Online (Sandbox Code Playgroud)
忽略我写的所有代码(如果需要):我如何QueryInterface在对象后代中实现TInterfacedObject?
我一直试图解决的真正问题可归结为我想:
我想覆盖接口中的方法
以同样的方式:
TList = …Run Code Online (Sandbox Code Playgroud) 当你有两个这样的规则:
.foo {
background-image: url(foo.gif);
}
.foo {
background-image: url(bar.gif);
}
Run Code Online (Sandbox Code Playgroud)
并有 <div class='foo'>Foobar</div>
您的浏览器会同时缓存,还是仅实际显示(bar.gif在这种情况下)?
在所有设置中都是如此吗?(规则在不同的文件中,!important适用于一个,等等)
为什么ANSI C编译器不会在函数调用中标记字符串文字参数的使用,其中相关参数没有const限定符?例如,以下代码可以通过尝试写入只读内存来生成异常.
void somefunc(char buffer[10]);
void somefunc(char buffer[10]) {
int i;
for (i = 0; i < 10; i++)
buffer[i] = 0;
}
int main(int argc, char **argv) {
somefunc("Literal");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这种情况可以在编译时识别,但VS2010和gcc似乎没有这样做.使用const char*参数调用somefunc将生成编译器警告.
我认为GC可能会以不同方式处理引用类型和值类型.
如果没有人参考,GC将收集参考类型.GC会收集类似struct的值类型吗?我的结构不小.我希望尽可能早地收集它.使用分析器软件,我看到结构有很大的积累,并且是主要的内存消耗.
我完全没有正则表达式,所以我需要一些帮助来解决我认为最好通过使用正则表达式来解决的问题.
我在C#中有字符串列表:
List<string> lstNames = new List<string>();
lstNames.add("TRA-94:23");
lstNames.add("TRA-42:101");
lstNames.add("TRA-109:AD");
foreach (string n in lstNames) {
// logic goes here that somehow uses regex to remove all special characters
string regExp = "NO_IDEA";
string tmp = Regex.Replace(n, regExp, "");
}
Run Code Online (Sandbox Code Playgroud)
我需要能够遍历列表并返回每个项目而没有任何特殊字符.例如,第一项是"TRA9423",第二项是"TRA42101",第三项是TRA109AD.
是否有正则表达式可以为我完成此操作?
此外,该列表包含超过4000个项目,因此我需要搜索和替换,以尽可能高效和快速.
编辑:我应该指定az,AZ和0-9旁边的任何字符在我的环境中都是特殊的.
我最近由我公司的一位高级开发人员审核了我的代码.他批评我的设计使用了太多的课程.我很想听听你的反应.
我的任务是创建一个服务,该服务生成一个xml文件,因为它操作了3个其他xml文件.我们将这些命名为aaa.xml,bbb.xml和ccc.xml.该服务分两个阶段进行.在第一阶段,它会针对bbb.xml清理aaa.xml.在第二阶段,它将第一阶段的产品与ccc.xml合并以产生最终结果.
我选择了一个包含三个类的设计:一个XmlService类,它使用了另外两个类,一个scrubber类和一个merger类.我保持擦洗和合并类是分开的,因为这两个类都很大并且具有不同的逻辑.
我认为我的方法很好,因为它让我的课程变得小而有凝聚力.我的方法也有助于控制我的测试类的大小.
高级开发人员断言,清理和合并类只能由XmlService类使用,因此应该是它的一部分.他觉得这会使XMLService具有凝聚力,这就是他所说的具有凝聚力的意思.他还认为以这种方式分手,会使他们松散凝聚力.
具有讽刺意味的是,我试图打破这些课程以达到凝聚力.你怎么看?谁对或错?我们都对吗?谢谢你的建议.
我正在使用当前代码:
$('body').mousedown(function() {
$('div#extras').fadeTo('fast', 1);
});
$('body').mouseup(function() {
$('div#extras').delay(2000).fadeTo(1500, 0);
});
Run Code Online (Sandbox Code Playgroud)
这在safari中效果很好,但是当我上传并在ipad上查看它时它不起作用?