我正在尝试转换一些免费的Pascal代码,以便用Delphi10.2编译。
免费的Pascal代码的结构如下:
generic TVolume<T> = class(TObject)
// T has to be a numerical/float type
constructor Create(pSizeX, pSizeY, pDepth: integer; c: T = 0);
constructor Create(Original: TBits; pFalse: T = -0.5; pTrue: T = +0.5);
Delphi不喜欢这样:E2268
考虑以下Delphi 2010中泛型实用程序类的声明:
TEnumerableUtils = class
public
class function InferenceTest<T>(Param: T): T;
class function Count<T>(Enumerable: TEnumerable<T>): Integer; overload;
class function Count<T>(Enumerable: TEnumerable<T>; Filter: TPredicate<T>): Inte
我正在从事Delphi 10.2东京的工作,面临着以下情况: 假设我有以下步骤来验证对象的属性: procedure TGenericUnit.VerifyProps<T>(_AObj: T);
var
AContext: TRttiContext;
AType: TRttiType;
AProp: TRttiProperty;
begin
AType := AContext.GetType(T);
for AProp in AType.GetProperties do
if AProp.PropertyType is TObject t
Delphi是否支持 / 的泛型,例如Scala?
我在Embarcadero的文档中没有找到任何关于它的信息:
此外,在“Generics中的约束”中有一个针对类型界限的隐式提示:
约束项包括:
0、1或多个接口类型
零或一类类型
保留词“构造函数”、“类”或“记录”
可以为约束指定“构造函数”和“类”。然而,“记录”不能与其他保留字结合。多个约束充当一个附加的联合(“和”逻辑)。
示例:
让我们看看下面Scala代码中的行为,它演示了上限类型限制的用法。我发现了这个例子
class Animal
class Dog extends An
有没有什么有效的方法来为delphi泛型添加特定类型的代码?例如,如下所示:
function TGT<T>.GetSize(a: T): integer;
begin
{$IF TypeInfo(T)=TypeInfo(String)}
result := Length(A);
{$ELSE}
result := SizeOf(A);
{$IFEND}
end;
function TGT<T>.Compare(a,b: T): integer;
begin
{$IF TypeInfo(T)=TypeInfo(String)}
我有一个这样的类:
type A = class
procedure<T> DoStuff(tPtr: ^T);
end;
但是当我尝试编译时,Delphi给出了这个错误:
[DCC Error] RPML.pas(57): E2029 Identifier expected but '^' found
如何在Delphi过程中使用指向参数化类型的指针?我不想让整个类成为模板类。
最好让泛型属性getter/setter对每个访问执行公共任务。
该代码在Delphi XE2 'E2008不兼容类型‘中给出了编译时错误。类似的代码在编译过程中出现内部错误,但从不编译。我是犯了一个错误还是它是编译器的限制?
type TFoo = class
private
function Get<T>: T;
public
property Bar: Integer read Get<Integer>;
end;
function TFoo.Get<T>: T;
begin
Result := 0;
end;
这就是我想要达到的目标:
program Project4;
{$APPTYPE CONSOLE}
type
TGenericClass<T> = class
public type
THandler = procedure(aParam: T);
end;
TMyClass = class(TGenericClass<TObject>)
public
procedure DoSomething(aHandler: TMyClass.THandler);
end;
procedure TMyClass.DoSomethin
我有一个必须返回泛型接口的方法。尝试在delphi中制作该方法。但不确定该怎么写呢?有人能帮我吗?下面是我在Java中所做的一个示例,它可以工作:
public < T extends StandardDataProvider<?>> T GetDataProvider(String dataProviderName) {
if (dataproviders == null)
buildDataProviderMap();
if (dataproviders.containsKey(dataProviderName)) {
使用64位Win7上的Delphi XE2更新3或更新4。
在Delphi 6中,调用枚举窗口的工作方式与以前不同。
在Delphi6中,枚举窗口处理窗口,直到回调函数返回False。这就是文档所说的它应该做的:
要继续枚举,回调函数必须返回TRUE;要停止枚举,回调函数必须返回FALSE。
调用枚举窗口,如下所示:
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@FindMyWindow,0);
if GLBWindowHandle <> 0 then begin
ShowMes
我想把我的C++代码转换成Delphi代码。但是我从Delphi编译器获得了这个错误:Declaration of 'callFunction<T>' differs from previous declaration。
我的C++代码:
class Example
{
public:
template<typename T>
static void callFunction(const T value);
};
template<>
void Example::callFunction<int>(const int v
在C++中,您可以显式地为模板化函数定义唯一的专门化,比如(到)
// A generic sort function
template <class T>
void sort(T arr[], int size)
{
// code to implement Quick Sort
}
// Template Specialization: A function
// specialized for char data type
template <>
void sort<char>(char arr[], int size)
{
//
在尝试将泛型列表的实例传递给泛型方法时,我遇到了一个奇怪的Delphi (东京)编译器的限制,而将泛型数组传递给方法(1)编译器接受,一切都按预期工作。
(1) class procedure DoSomethingWithDynamicArray<T: class>(AArray: array of T);
(2) class procedure DoSomethingWithGenericArray<T: class>(AArray: TArray<T>);
(3) class procedure DoSomethingWithGenericList&l
我正在将代码从Lazarus转换到Delphi 10.4悉尼,并有一个抛出错误的行:
// Split line and put it into a new array, txtDataArray
txtDataArray := txtToParse.Split(['.', ',', '!'], TStringSplitOptions.ExcludeEmpty);
txtToParse是逗号分隔的文本变量。
在悉尼的德尔菲10.4,我该如何正确地写这篇文章呢?
我试了一下,得到一个错误,上面写着:
不兼容类型--第340行中的动态数组和系统TA
这是我在这里的第一个问题,很高兴找到这个网站。
我的问题涉及到Delphi2009中的新泛型特性。基本上,我尝试为现有的散列映射实现编写一个通用包装器类。现有的实现存储(字符串,指针)对,因此在包装器类中,我必须在泛型参数类型T和指针类型之间进行转换,反之亦然。
type THashMap <T : class> = class
private
FHashList : THashList;
...
end;
我想了一个这样的造型(Value : T)
Value := (TObject (Ptr)) as T
但这不管用。编译器告诉我“运算符不适用于此操作数类型”。
我有两个表单: Form_Main和Form_Child,我必须在Form_Main中实例化Form_Child。Form main有一个列表,Form_Child的构造函数有一个泛型列表。当我尝试实例化该子窗体时,收到以下错误消息:错误1非泛型类型'GenericParameterToFormConstructor.Form_Child‘不能与类型参数一起使用。form_Main的代码是:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
us
我试图构建一个Delphi桥文件来访问用Kotlin编写的Android库。解压缩的.jar有以下声明:
public interface Function<R> {}
public interface Function2<P1, P2, R> extends Function<R> {
R invoke(P1 var1, P2 var2);
}
public final class Unit {
// snip
}
public interface Controller {
void getNearbyStops(@NotNu
我的问题与“How to use generics as a replacement for a bunch of overloaded methods working with different types?”非常相似。 我尝试了建议的解决方案GetRandomValueFromArray,它没有给出complitetime错误。但以下代码无法编译: Declaration / definition in existing class Tilib ..
class function SetSingleBit<T>(const Value: T; const Bit:
我在做C++和德尔菲的比较,发现了一些棘手的问题。
这是非常简单的C++代码:
template<typename T>
class C {
class D {
T x;
}
}
在这个场景中,类C是一个模板类(=泛型类),嵌套类D也是一个模板类。如果T是double,则D内部的x是double。
我不能这样说:
template<typename T>
class C {
template<typename T>
class D {
T x;
}
}
这是一个错误,因为我已经“在”C和另一个T将是一个冲突。要修复错误,我应该使用一
我正在尝试创建一个泛型类,我可以使用一组枚举来初始化内部的值。例如:
constructor TManager<TEnum>.Create;
var
enum: TEnum;
enumObj: TMyObject;
begin
fMyObjectList:= TObjectDictionary<TEnum,TMyObject>.Create([doOwnsValues],10);
for enum:= Low(TEnum) to High(TEnum) do
begin
enumObj:= TMyObject.Create();
f