小编Rob*_*edy的帖子

为什么即使给出模板参数,ptr_fun也会发现这种模糊不清?

所以,这里有一些基本代码说明了我的问题:

#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 …

c++ ambiguity functor

8
推荐指数
1
解决办法
1515
查看次数

为什么我不能将TObjectList <S:T>传递给期望TObjectList <T>的函数?

我的代码有问题,它使用泛型类型.为什么编译器不知道传递的list(Result)是一个TObjectList<TItem>(TItemTin的类型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)

delphi generics tobjectlist

8
推荐指数
1
解决办法
937
查看次数

通常的做法是询问用户是否希望接收推送通知?

我是Android平台的新手.Apple要求每个iOS应用程序都要求并确认推送通知,但我没有注意到我在新Android手机上下载的任何应用程序提示我是否要接收推送通知.它只是自动注册我.这是正常的Android约定,自动注册用户推送通知,假设他们可以在以后禁用它们吗?

在我自己的Android应用程序中,我应该在注册之前提示用户并询问他们是否需要它们?显然,在签署推送通知之前要求获得许可是一件礼貌的事情,但如果这不是常见的做法,我认为没有理由可能失去一些接收器.

notifications android push-notification android-sdk-tools

8
推荐指数
1
解决办法
2572
查看次数

为什么TObject.AfterConstruction和BeforeConstruction具有公众可见性?

如今,一个很简单的问题来到我的脑海里,当我不得不重写TObjectBeforeConstruction方法:

为什么TObject方法AfterConstructionBeforeConstructionpublic知名度?

我希望他们是protected.他们不是的原因是什么?

我无法想象调用AfterConstructionBeforeConstruction不调用该类的构造函数或析构函数的有效目的.你呢?

delphi tobject delphi-xe4

8
推荐指数
1
解决办法
580
查看次数

为什么THashedStringList不会忽略重复?

我有以下代码:

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.这是什么错误?

delphi delphi-2009

7
推荐指数
1
解决办法
1652
查看次数

为什么在加载另一个模块之前模块是不可用的?

我工作的大部分单元都依赖于数据模块.我遇到的最令人讨厌的事情之一是告诉我的错误消息

模块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)

delphi datamodule

7
推荐指数
1
解决办法
2497
查看次数

如何获得视觉上鲜明的颜色列表?

我需要指定颜色来区分不同的项目.简单案例:根据客户订购不同颜色的行.

我不想让用户为每个客户选择一种颜色,我想在运行时这样做.

如果有一个客户我将使用"红色",如果有两个"红色"和"白色",...

当然,我可以创建GimmeRandomColour(i: index)自己的函数,使用iRGB函数创建良好的随机颜色(但在这种情况下,创建漂亮的颜色可能会很棘手).或者我可以说如果i是0给我clRed,...(以这种方式创建许多颜色可能是一个问题).

如何以可接受的对比度获得"良好的颜色列表"?

delphi colors color-palette

7
推荐指数
1
解决办法
3160
查看次数

如何设置TPageControl的当前页面?

我使用的是的PageControl组件,我需要添加一个按钮,点击它去到指定的页面.

我该怎么办?

delphi tpagecontrol

7
推荐指数
2
解决办法
2万
查看次数

如何在调试器中显示TStringList的内容?

我想在调试应用程序时显示TStringList的全部内容.相反,我只是得到指针.Flist仅显示地址.

delphi debugging tstringlist

7
推荐指数
3
解决办法
4571
查看次数

DUnit2的CallerAddr函数有什么作用,如何将其转换为64位?

我试图让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 assembly 32bit-64bit

7
推荐指数
1
解决办法
496
查看次数