在Karl Seguin的编程基础中,有一小部分关于使用工厂模式.他通过声明"你可以使用构造函数重载完成相同的功能"来关闭段落,但是没有说明何时或为什么?
那么,何时使用工厂模式而不是重载的构造函数来实例化对象更有意义呢?
constructor design-patterns factory overloading instantiation
我正在实现一个具有最小功能的自定义UIButton..h文件:
#import <Foundation/Foundation.h>
@interface CustomButton : UIButton {
}
@end
Run Code Online (Sandbox Code Playgroud)
我在.m文件中的第(A)行遇到编译错误:
- (id)initWithCoder:(NSCoder *)coder {
if(self = [super initWithCoder:coder]) {
CALayer *layer = [self layer];
NSLog(@"layer=%@",layer);
NSLog(@"delegate=%@",[layer delegate]);
#ifdef __IPHONE_3_0
layer.cornerRadius = 4.0f; // (A) error: request for member 'cornerRadius' in something not a structure or union
#endif
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉(A)行,我得到以下输出:
2009-10-08 17:35:06.681 MyApp[2596:4e07] layer=<CALayer: 0x3cdf520>
2009-10-08 17:35:06.683 MyApp[2596:4e07] delegate=<CustomButton: 0x3cdaff0; baseClass = UIButton; frame = (9 212; 255 55); opaque = NO; autoresize = RM+BM; layer = …Run Code Online (Sandbox Code Playgroud) 你如何异化存储在EAX中的值?
问题出在这一行:
xor eax, key
Run Code Online (Sandbox Code Playgroud)
EAX包含我想要XOR的值的地址.我怎么能做到这一点?我虽然会有以下几点:
xor [eax], key
Run Code Online (Sandbox Code Playgroud)
但这不起作用(语法错误)
decrypt proc startAddress:DWORD , sizeOfSegment:DWORD , key:DWORD
xor ecx, ecx ; clear the ecx register for the counter
mov eax, startAddress ; copy the start address to eax
.while ecx < sizeOfSegment ; loop through the code
xor eax, key ; XOR decrypt the word
inc eax
inc ecx
.endw
ret
decrypt endp
Run Code Online (Sandbox Code Playgroud) 我需要在我的网络应用程序中跟踪唯一访客数量.我真的很想使用谷歌分析,但由于谷歌强加的负载限制,我将无法使用它们.我期待每天超过10,000个请求.这是Google网站分析API强加的限制.是否有另一家公司具有与付费或免费的谷歌分析相同的功能?
假设我有2个型号.
第二个模型与第一个模型具有一对一的关系.
我想从第一个模型中选择信息,但是从第二个模型中选择ORDER BY.我怎样才能做到这一点?
class Content(models.Model):
link = models.TextField(blank=True)
title = models.TextField(blank=True)
is_channel = models.BooleanField(default=0, db_index=True)
class Score(models.Model):
content = models.OneToOneField(Content, primary_key=True)
counter = models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud) 我定义了一个服务器方法:
TServerMethod = class(TPersistent)
public
function EchoString(Value: string): string;
end;
Run Code Online (Sandbox Code Playgroud)
方法EchoString返回一个等效的Value字符串.
然后我使用TDSTCPServerTransport与TDSServer和TDSServerClass包装服务器方法.
在客户端,我创建一个DataSnap TSQLConnection并生成一个TServerMethodProxy客户端类:
function TServerMethodClient.EchoString(Value: string): string;
begin
if FEchoStringCommand = nil then
begin
FEchoStringCommand := FDBXConnection.CreateCommand;
FEchoStringCommand.CommandType := TDBXCommandTypes.DSServerMethod;
FEchoStringCommand.Text := 'TServerMethod.EchoString';
FEchoStringCommand.Prepare;
end;
FEchoStringCommand.Parameters[0].Value.SetWideString(Value);
FEchoStringCommand.ExecuteUpdate;
Result := FEchoStringCommand.Parameters[1].Value.GetWideString;
end;
Run Code Online (Sandbox Code Playgroud)
我能够在客户端应用程序中通过TCP连接使用EchoString方法:
var o: TServerMethodClient;
begin
o := TSeverMethodClient.Create(SQLConnection1.DBXConnection);
try
ShowMessage(o.EchoString('Hello'));
finally
o.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
上述场景使用TCP/IP作为通信协议.
但是,我希望将我的ServerMethod与我的客户端一起部署为"In Process"模型.如何在不更改客户端和服务器方法代码的情况下实现这一目标?
我应该将哪个参数传递给TServerMethodClient.Create构造函数以建立进程内连接?
o := TSeverMethodClient.Create(SQLConnection1.DBXConnection);
Run Code Online (Sandbox Code Playgroud)
在旧的DataSnap日,我们可以使用TLocalConnection享受In Process访问,而无需更改客户端和服务器代码.
我有一套ESRI shapefile,据我所知,它是用英国国家网格坐标系编写的.我需要将这些文件转换为WGS84 lat/lons,以便继续转换为KML文件.我这样做有困难如下:
如果我打开MapInfo Professional中的每个原始文件,告诉我我的文件有一个英国国家网格的投影,那么我在文件中看不到任何地理对象; 地图窗口完全为空.
如果我使用MapInfo Professional的Universal Translator将文件转换为WGS84 MapInfo TAB文件,那么,与之前一样,转换后的文件将不会显示任何地理对象,MapInfo窗口为空.
我可以验证这些文件的坐标系吗?我在这里错过了什么吗?我是否应该能够以我期望的方式转换shapefile并使用MapInfo Professional查看它们?另一个工具会为我做得更好吗?
谢谢.
更多信息:
我的shapefile有一些似乎没有正确转换为lat/lon的坐标,我现在想知道坐标是不是英国国家网格.我看到坐标如383702523,399081141,看起来大约是纬度/经度53.488182,-2.247153.你知道我的输入文件是什么投影系统吗?
我希望我的C函数能够有效地计算两个64位有符号整数的乘积的高64位.我知道如何在x86-64程序集中执行此操作,使用imulq并将结果从%rdx中拉出.但是我完全不知道如何在C语言中编写它,更不用说哄骗编译器有效地执行它了.
有没有人有任何建议用C写这个?这是性能敏感的,因此"手动方法"(如俄罗斯农民或bignum图书馆)已经出局.
我写的这个笨拙的内联汇编函数很有用,大致是我追求的代码:
static long mull_hi(long inp1, long inp2) {
long output = -1;
__asm__("movq %[inp1], %%rax;"
"imulq %[inp2];"
"movq %%rdx, %[output];"
: [output] "=r" (output)
: [inp1] "r" (inp1), [inp2] "r" (inp2)
:"%rax", "%rdx");
return output;
}
Run Code Online (Sandbox Code Playgroud) 如果我在c ++程序中有一些c ++代码作为字符串数量(数据),我可以执行该字符串的内容吗?
在C#中使用CodeDOM或在perl,python等中使用eval函数.