我怀疑我无法解决.我已经在embarcadero上阅读了类构造函数的文档,但我无法理解它的含义.换句话说,a constructor和a 之间的用法差异是class constructor什么?我这样做了:
type
TGeneric<T> = class
private
FValue: T;
aboutString: string;
procedure setValue(const a: T);
public
property V: T read FValue write setValue;
property about: string read aboutString;
constructor Create;
destructor Destroy; override;
end;
implementation
{ TGeneric<T> }
constructor TGeneric<T>.Create;
begin
inherited;
aboutString := 'test';
end;
Run Code Online (Sandbox Code Playgroud)
相反,此代码无法正常工作:
type
TGeneric<T> = class
private
FValue: T;
aboutString: string;
procedure setValue(const a: T);
public
property V: T read FValue write setValue;
property about: string read aboutString; …Run Code Online (Sandbox Code Playgroud) 我正在网上阅读Nick Hodges,我发现了Queue,但它并没有像我预期的那样表现,我无法理解他和文档所说的内容.看看这段代码:
TThread.CreateAnonymousThread(
procedure
begin
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('start');
end);
Sleep(2000);
TThread.Synchronize(TThread.Current, procedure
begin
Memo1.Lines.Add('end');
end);
end
).Start;
Run Code Online (Sandbox Code Playgroud)
我总是使用,Synchronize但这次我尝试过,Queue因为根据尼克,在多个请求的情况下更好,因为它们不会被"序列化"并逐个执行.上面的代码工作正常.为什么这不起作用呢?
TThread.CreateAnonymousThread(
procedure
begin
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('start');
end);
Sleep(2000);
TThread.Queue(TThread.Current, procedure
begin
Memo1.Lines.Add('end');
end);
end
).Start;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,备注输出start但不是结束.我打电话的时候:
start备忘录中的内容我正在对C++和Delphi进行比较,我发现了一些棘手的东西.
这是非常简单的C++代码:
template<typename T>
class C {
class D {
T x;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们认为类C是模板类(=泛型类),嵌套类D也是模板类.如果T是double,则x内部D是double.
我不能这样说:
template<typename T>
class C {
template<typename T>
class D {
T x;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误,因为我已经"内部" C而另一个T将是一个冲突.要修复错误,我应该使用不同的名称,例如U.
template<typename T>
class C {
template<typename U>
class D {
T x;
}
}
Run Code Online (Sandbox Code Playgroud)
在Delphi中,我可以这样写:
type
TClassC<T> = class
private
type
TClassD = class
private
x: T;
end;
end; …Run Code Online (Sandbox Code Playgroud) 我正在使用此代码
type
TSomeClass = class(TOBject)
private
class var InstanceCount : integer;
class var TotalInstanceCount : integer;
public
class function instances: integer;
class function totalInstances: integer;
constructor Create;
destructor Destroy;
end;
constructor TSomeClass.Create;
begin
inherited Create;
Inc(InstanceCount);
Inc(TotalInstanceCount);
end;
destructor TSomeClass.Destroy;
begin
Dec(InstanceCount);
inherited;
end;
class function TSomeClass.instances;
begin
Result := InstanceCount;
end;
class function TSomeClass.totalInstances;
begin
Result := TotalInstanceCount;
end;
Run Code Online (Sandbox Code Playgroud)
我想创建一个实例计数器,并将一些类变量设置为私有.问题很简单,看看这张图:
正如您在红色框中看到的那样,我声明为私有的类变量.我不希望它们出现.我只希望公共类函数能够显示计数器.我能做什么?
事实上,网上有很多关于此的内容,但更多的是我读起来更加困惑.我写了一个叫做Combinatorics一些数学概率的组件.代码非常简短,因为我不希望它变得复杂.我在这里做一些预览:
//Combinatorio.pas
type
ICombinatorio = interface
function getSoluzioni(): integer; //soluzioni means "Solutions"
function getFormula(): string;
end;
//ImplCombinatorio.pas
type
TCombinazioni = class(TInterfacedObject, ICombinatorio)
private
n, k: integer;
ripetizione: boolean;
function fattoriale(const x: integer): integer;
public
constructor Create(const n, k: integer; const ripetizione: boolean);
function getSoluzioni(): integer;
function getFormula(): string;
end;
TDisposizioni = class(TInterfacedObject, ICombinatorio)
private
n, k: integer;
ripetizione: boolean;
function fattoriale(const x: integer): integer;
public
constructor Create(const n, k: integer; const ripetizione: boolean);
function getSoluzioni(): integer;
function getFormula(): …Run Code Online (Sandbox Code Playgroud) 我已经读过SO,开放数组参数会自动通过引用传递.类和字符串是一样的,还是我必须使用var?
我指的是我想通过引用传递给函数(或过程)一个参数.就像在C++中一样,我总是传递std :: string&,它是显式的,否则我传递一个副本
这是我希望能够解析的示例 JSON:
[
{
"a":{
"username":"aaa",
"email":"aaa@gmail.com"
}
},
{
"b":{
"username":"bbb",
"email":"bbb@gmail.com"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我需要调用getData('b', 'email')must 输出bbb@gmail.com!
我真的很难理解如何使用该System.JSON单元,但我无法得到解决方案!我希望能够编写一个从上述 JSON 结构中提取特定数据的函数。到目前为止,这是我的代码。在类构造函数中,我有:
var
FIds: TJSONArray;
begin
FIds := TJSONObject.ParseJSONValue({json string here}) as TJSONArray;
end;
Run Code Online (Sandbox Code Playgroud)
然后,在必须返回数据的函数中,我写了这个:
// 'name' can be 'a' or 'b' | 'data' can be 'username' or 'email'
function TTest.getData(const name, data: string): string;
var
FValue, FValueInner: TJSONValue;
begin
for FValue in Fids do
begin
if (FValue is TJSONArray) then
begin
//Here I …Run Code Online (Sandbox Code Playgroud) 这个问题可能很容易,但我真的无法在网上找到真正的答案.我已经知道我可以使用FireDac连接到存储在我的计算机中的sqlite数据库,但现在我想继续使用在线sql服务器.
我拥有一个带有sql server的域名.
这是我的配置,它告诉我Unknown configuration host.我需要在线连接到我的sql数据库.FireDAC是真正的解决方案吗?
我有这种连接字符串服务器端:
$pdo = new PDO('mysql:host=mysql.netsons.com;dbname=caorobwq_worldcup', 'username', 'password');
Run Code Online (Sandbox Code Playgroud) 我试图理解名为"variadic"的C++ 11特性.看看这个简单的代码:
#include <iostream>
using namespace std;
template<typename T, typename... Args>
T adder(T first, Args... args) {
return first + adder(args...);
}
int main() {
int c = adder(1,8,4);
cout << c << endl;
cout << "Hello World!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
阅读c ++入门书籍我已经理解它们以递归方式工作,我也看到在递归调用中,args...部分被传递.
我正在使用MinGW 5和QtCreator来测试它.看
好的,要修复我可以调用的太少的参数,adder(first, args...)但现在递归不正确并且程序崩溃了.该怎么办?我无法理解如何做到这一点.
在线查看我发现了一个这样的例子
template <typename T, typename... Rest>
double sum(T t, Rest... rest) {
return t + sum(rest...);
}
Run Code Online (Sandbox Code Playgroud)
它基本相同.我是否必须使用显式(非模板)返回类型?
当我必须创建在我的应用程序中多次使用的小部件的“模板”时,我使用了很多 StatelessWidgets,因为文档是这样说的:
当您描述的用户界面部分不依赖于对象本身中的配置信息和小部件在其中膨胀的 BuildContext 之外的任何其他内容时,无状态小部件很有用。
下面是一个例子:
class StepInputButton extends StatelessWidget {
final int pos;
final String value;
const StepInputButton({
this.pos,
this.value
});
@override
Widget build(BuildContext context) {
return Row(
// Text, Icon and a tiny button
);
}
}
Run Code Online (Sandbox Code Playgroud)
以上很好,因为我可以const StepInputButton(val, "val"),在代码中使用 CONST 来提高性能。
问题
我正在使用著名的Provider小部件来管理我的应用程序的状态和页面通常如下所示:
class SuccessPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
var prov = Provider.of<Type>(context);
return Scaffold(...);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的带有 Scaffold 的应用程序页面,它有一个抽屉、一个浮动操作按钮和一个 appTitle。在这里,我使用 StatelessWidget,因为我不使用 setState(),因为 provider 为我完成了所有工作。但他们仍然在官方颤振文档中说:
对于可以动态更改的组合,例如由于具有内部时钟驱动状态或取决于某些系统状态,请考虑使用 StatefulWidget。
所以我不得不改变class …