小编Chr*_*ski的帖子

为什么受保护的超类成员在作为参数传递时无法在子类函数中访问?

我得到一个编译错误,我有点困惑.这是在VS2003上.

错误C2248:'A :: y':无法访问在类'A'中声明的受保护成员

class A
{
public:
  A() : x(0), y(0) {}
protected:
  int x;
  int y;
};

class B : public A
{
public:
  B() : A(), z(0) {}
  B(const A& item) : A(), z(1) { x = item.y;}
private:
  int z;
};
Run Code Online (Sandbox Code Playgroud)

问题是x = item.y;

访问权限被指定为受保护.为什么B类的构造函数不能访问A :: y?

c++ protected member superclass

13
推荐指数
1
解决办法
4693
查看次数

是否可以通过OData流式传输实体?

我是OData的新手,所以请耐心等待.

假设我正在使用带有OData的IQueryable <>,并且服务器生成的记录数量很大(比如10000),是否可以在客户端继续到达时开始处理实体(在整个HTTP流之前有已收到)?

我想到的概念类似于使用LINQ和SqlDataReader(详细信息),其中数据是从SQL(通过连接到SqlDataReader的基础服务器端游标)获取的,只有在LINQ2SQL提供程序枚举记录时才会这样.

HTTP确实允许流式传输.OData IQueryable <>可以利用这种支持吗?如果可以实现端到端流,则将在服务器上枚举数据并且一次一个记录地流(到序列化)到HTTP流中.当流被客户端接收并反序列化时,可以枚举实体并一次一个地到达.

这是一厢情愿的想法吗?

.net iqueryable odata

6
推荐指数
1
解决办法
2315
查看次数

Delphi:链接到BPL中没有PACKAGEd的变量的任何方法?

我正在研究RAD Studio 2007中的一个项目,使用c ++中的VCL类.

TDBLookupControl是VCL的一部分,并且有一些不良行为,这是由使用内部变量引起的 SearchTickCount

var
   SearchTickCount: Integer = 0; //file scope in DBCtrls.pas

procedure TDBLookupControl.ProcessSearchKey(Key: Char);
var
  TickCount: Integer;
  S: string;
begin
//some code removed for brevity
      TickCount := GetTickCount;
      if TickCount - SearchTickCount > 2000 then SearchText := '';
      SearchTickCount := TickCount;
//some code removed for brevity
end;
Run Code Online (Sandbox Code Playgroud)

但是,SearchTickCount从未在VCL内部进行PACKAGEd,如下例所示.

extern PACKAGE int SearchTickCount;
Run Code Online (Sandbox Code Playgroud)

我想SearchTickCount在我的c ++代码中设置为零(按需).在我的代码中对它进行外部化使得c ++编译.但是,链接器(显然)找不到变量.

namespace Dbctrls
{
  extern int SearchTickCount;
}
// later on, inside a function
Dbctrls::SearchTickCount = 0;
Run Code Online (Sandbox Code Playgroud)

有没有办法/解决方法来链接到这个变量? …

delphi linker vcl

3
推荐指数
1
解决办法
486
查看次数

三元运营商评估订单

class Foo {
  public:
  explicit Foo(double item) : x(item) {}

  operator double() {return x*2.0;}

  private:
  double x;
}

double TernaryTest(Foo& item) {
  return some_condition ? item : 0;
}

Foo abc(3.05);
double test = TernaryTest(abc);
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果some_condition为真,为什么test等于6(而不是6.1)?

如下更改代码会返回6.1的值

double TernaryTest(Foo& item) {
  return some_condition ? item : 0.0; // note the change from 0 to 0.0
}
Run Code Online (Sandbox Code Playgroud)

似乎(在原始示例中)来自Foo :: operator double的返回值被强制转换为int,然后返回到double.为什么?

c++ ternary-operator ternary

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