所以,这里有一些基本代码说明了我的问题:
#include <functional>
int func(int x) {
return x;
}
int func(int x, int y) {
return x + y;
}
int main() {
std::ptr_fun<int, int>(func);
}
Run Code Online (Sandbox Code Playgroud)
对于具有不同参数数量的函数,我们有2个重载.然后我尝试在仿函数中转换单个参数版本.当然,我遇到以下错误:
test.cc: In function 'int main()': test.cc:13:29: error: call of overloaded 'ptr_fun()' is ambiguous /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:437:5: note: candidates are: std::pointer_to_unary_function std::ptr_fun(_Result (*)(_Arg)) [with _Arg = int, _Result = int] /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:463:5: note: std::pointer_to_binary_function std::ptr_fun(_Result (*)(_Arg1, _Arg2)) [with _Arg1 = int, _Arg2 = int, _Result = int]
我知道我可以投出func并完成它,但它让我想到为什么这是模棱两可的?这两个版本std::ptr_fun都没有模板定义中的默认参数,我已经明确地说过两个模板参数int …
我的代码有问题,它使用泛型类型.为什么编译器不知道传递的list(Result)是一个TObjectList<TItem>(TItem是Tin的类型TItems)?
接口:
type
TItem = class
end;
type
IItemsLoader = interface
procedure LoadAll(AList : TObjectList<TItem>);
end;
type
TItemsLoader = class(TInterfacedObject, IItemsLoader)
public
procedure LoadAll(AList : TObjectList<TItem>);
end;
type
IItems<T : TItem> = interface
function LoadAll : TObjectList<T>;
end;
type
TItems<T : TItem> = class(TInterfacedObject, IItems<T>)
private
FItemsLoader : TItemsLoader;
public
constructor Create;
destructor Destroy; override;
function LoadAll : TObjectList<T>;
end;
Run Code Online (Sandbox Code Playgroud)
执行:
procedure TItemsLoader.LoadAll(AList: TObjectList<TItem>);
begin
/// some stuff with AList …Run Code Online (Sandbox Code Playgroud) 我是Android平台的新手.Apple要求每个iOS应用程序都要求并确认推送通知,但我没有注意到我在新Android手机上下载的任何应用程序提示我是否要接收推送通知.它只是自动注册我.这是正常的Android约定,自动注册用户推送通知,假设他们可以在以后禁用它们吗?
在我自己的Android应用程序中,我应该在注册之前提示用户并询问他们是否需要它们?显然,在签署推送通知之前要求获得许可是一件礼貌的事情,但如果这不是常见的做法,我认为没有理由可能失去一些接收器.
如今,一个很简单的问题来到我的脑海里,当我不得不重写TObject的BeforeConstruction方法:
为什么TObject方法AfterConstruction和BeforeConstruction有public知名度?
我希望他们是protected.他们不是的原因是什么?
我无法想象调用AfterConstruction或BeforeConstruction不调用该类的构造函数或析构函数的有效目的.你呢?
我有以下代码:
var
sl: THashedStringList;
begin
sl:= THashedStringList.Create;
sl.Duplicates := dupIgnore;
sl.Add('12345');
sl.Add('12345');
sl.Add('12345');
sl.Add('12345');
sl.Add('12345');
sl.Add('12345');
sl.Add('12345');
ShowMessage(IntToSTr(sl.Count));
end;
Run Code Online (Sandbox Code Playgroud)
但是当我看到sl.Count它时,它给了我7.这是什么错误?
我工作的大部分单元都依赖于数据模块.我遇到的最令人讨厌的事情之一是告诉我的错误消息
模块X引用另一个模块,在加载模块Y之前无法保存.
现在,我确信有一个很好的理由为什么CheckNoFixups在尝试时会引发此错误WriteRootStream,并且无法保存实际上是一个Text文件(并且希望这不会出现Catastrophic Failure在我必须重新启动IDE但仍然无法执行的情况下保存我的工作.)但是有什么好理由?
为什么我不能单击保存而不打开包含各种功能和对象的任何文本文件,就像任何其他单元一样?关于DataModule有什么特别之处,这意味着我无法保存我正在处理的源,直到它打开为止,为什么use子句中的其他45个单元不是那么重要它们必须是开放的?
编辑: 这是Delphi 2007
DataModule的声明是:
unit DataMD;
TRepDataMod = class(TDataModule)
...
var
RepDataMod: TRepDataMod;
Run Code Online (Sandbox Code Playgroud) 我需要指定颜色来区分不同的项目.简单案例:根据客户订购不同颜色的行.
我不想让用户为每个客户选择一种颜色,我想在运行时这样做.
如果有一个客户我将使用"红色",如果有两个"红色"和"白色",...
当然,我可以创建GimmeRandomColour(i: index)自己的函数,使用i和RGB函数创建良好的随机颜色(但在这种情况下,创建漂亮的颜色可能会很棘手).或者我可以说如果i是0给我clRed,...(以这种方式创建许多颜色可能是一个问题).
如何以可接受的对比度获得"良好的颜色列表"?
我使用的是的PageControl组件,我需要添加一个按钮,点击它去到指定的页面.
我该怎么办?
我想在调试应用程序时显示TStringList的全部内容.相反,我只是得到指针.Flist仅显示地址.
我试图让DUnit2在64位下工作,但我很难接受这个方法的功能,更不用说如何将它转换为64位.Pure Pascal会更好,但由于它指的是堆栈(ebp),它可能是不可能的.
function CallerAddr: Pointer; assembler;
const
CallerIP = $4;
asm
mov eax, ebp
call IsBadPointer
test eax,eax
jne @@Error
mov eax, [ebp].CallerIP
sub eax, 5 // 5 bytes for call
push eax
call IsBadPointer
test eax,eax
pop eax
je @@Finish
@@Error:
xor eax, eax
@@Finish:
end;
Run Code Online (Sandbox Code Playgroud) delphi ×8
32bit-64bit ×1
ambiguity ×1
android ×1
assembly ×1
c++ ×1
colors ×1
datamodule ×1
debugging ×1
delphi-2009 ×1
delphi-xe4 ×1
functor ×1
generics ×1
tobject ×1
tobjectlist ×1
tpagecontrol ×1
tstringlist ×1