- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在做很多关于异常安全的事情。 (Herb Sutter 的 Exceptional C++、C++ FAQ Lite 等)
特别是,我想编写并理解 C++ FAQ Lite 的引用计数示例,但我目前停留在这部分代码上:
class Smart_Ptr;
class Foo
{
private:
friend class Smart_Ptr;
unsigned int count_;
public:
static Smart_Ptr create() // Error here.
{
return new Foo();
}
private:
Foo()
: count_(0)
{ }
/* ... */
/* Smart_Ptr class initialized down here */
如您所见,我正在尝试使用 Named Constructor Idiom强制用户不要创建我的 Foo 对象的局部变量。本质上,这正是 C++ FAQ 中所写的内容;我只是将 Fred 更改为 Foo,将 FredPtr 更改为 Smart_Ptr,我意识到这是一个错误,因为现在更难看出连接。
我的编译器吐出错误:
错误 C2027:使用了未定义类型“Smart_Ptr”
我不太确定这是为什么。 Smart_Ptr 已完全定义并且是 FAQ 代码的完整拷贝。我也照原样完整复制了代码,但收到了同样的错误。
结束问题的关键部分
由于我一直错误地认为我发布了“足够”的源代码来调试问题,但我一直以错误告终,所以我将在此处发布其余代码。
/* Foo.h */
class Smart_Ptr;
class Foo
{
private:
friend class Smart_Ptr;
unsigned int count_;
public:
static Smart_Ptr create()
{
return new Foo();
}
private:
Foo()
: count_(0)
{ }
};
class Smart_Ptr
{
private:
Foo *p_; // p_ is NEVER null
public:
Foo *operator-> () { return p_; }
Foo& operator* () { return *p_; }
Smart_Ptr(Foo *p)
: p_(p)
{
++p_->count_;
}
~Smart_Ptr()
{
if (--p_->count_ == 0)
delete p_;
}
Smart_Ptr(Smart_Ptr const& p)
: p_(p.p_)
{
++p_->count_;
}
Smart_Ptr& operator= (Smart_Ptr const& p)
{
Foo *const old = p_;
p_ = p.p_;
++p_->count_;
if (--old->count_ == 0)
delete old;
return *this;
}
};
最佳答案
您不能编写返回 Smart_Ptr
的函数按值,直到 Smart_Ptr
被定义为。预先声明是不够的。
您链接到的代码包含注释,// Defined below class FredPtr {...};
, 但你已经定义了 create
Foo
中的函数类定义。如果您仔细查看“对类 Fred 的更改将是:”之后的代码,您会看到 create
。仅在类中声明:稍后通过以下代码定义:
inline FredPtr Fred::create() { return new Fred(); }
您只需做同样的事情。
关于C++ FAQ Lite Smart_Ptr 类不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3798076/
因为谷歌发布了几篇关于移动设备联邦学习的论文,比如Gboard,但是我在TFLite网站上找不到关于训练的文档,TFLite现在支持设备训练吗? 最佳答案 我们不支持在 TensorFlow Lite
我正在尝试创建一个饼图,其中弧按大小(顺时针)排序,但不知道如何排序。 看来“theta”中的“sort”参数指向“color”的默认顺序,例如: { "$schema": "https://ve
就像这个: https://www.r-graph-gallery.com/265-grouped-boxplot-with-ggplot2/ 我尝试了刻面、颜色 channel 和构图, 但结果并不
我试图在折线图中显示一些数据。但是,我的“Harvest_Year”数据(以年为单位的日期,如 2017 年或 2018 年)显示为我认为是一个字符串 我从 .csv 文件导入数据,以下是我将字符串更
VegaLite 自动分配颜色。金价是蓝色,银价是橙色,感觉不对。 如何指定显式颜色 - #F1C40F黄金和 #95A5A6为了银? 我也想保留data.values如下面的示例代码 - 作为一组单
我正在 Vega-Lite(使用 Altair 生成)中绘制条形图。使用 Vega-View API,我编写了一些代码,用户可以在其中选择条形,这会更改这些条形的颜色(以及在应用程序的其他地方做一些其
我想注册一个自定义 Multi-Hue Sequential Color Scheme在织女星精简版。 我对文档的阅读是我只能创建 config.range对象来设置自定义色阶,但无法公开插值函数,从
最近几天我一直在尝试重命名我的 vega-lite 图表上的图例标签。 通常,这些标签与其各自的数据字段名称匹配。我有一个案例,我想给它们一个更具描述性的名称,但不重命名原始数据名称。 一个简化的例子
如何在 VegaLite 中使用数组数据? 我想将数据用作数组 dates = [1, 2, 3] prices1 = [1, 2, 1] prices2 = [1.5, 1, 2] 代替 Veg
我有一个非常简单的情况,我相信我的解决方案太复杂了,很有可能我遗漏了一些东西。说我有 time 的措施,位置(x,y,z),角度(滚动,俯仰,偏航)和速度。我想要一个简单的可视化,就像我目前拥有的那样
我似乎无法通过阅读文档来弄清楚这一点。 有没有办法实现 onClick我的任何标记的事件处理程序? 最佳答案 由于 Vega-Lite 尚不支持信号,您可以修补生成的 Vega。您可以向已编译的 Ve
我正在尝试制作一个简单的堆积条形图,仅在 X 轴上。我让它工作,有两个值 50 和 250。所以 X 轴的最大值显示为 300。 如何将其强制为另一个值,例如 500?那么从最后一个值到轴的末端是否存
我可以设置字体吗?在 vega-lite's config object , 用于所有标签和标题? 我目前为 x&y 轴和颜色图例设置了 labelFont 和 titleFont,但它在任何地方都是
在 Vega Lite 中,我试图将我的图例与这张图表的中间对齐。我需要图例的 anchor 参数,但我只能找到 titleAnchor。 Chart with Legend "legend": {
我可以设置字体吗?在 vega-lite's config object , 用于所有标签和标题? 我目前为 x&y 轴和颜色图例设置了 labelFont 和 titleFont,但它在任何地方都是
在 Vega Lite 中,我试图将我的图例与这张图表的中间对齐。我需要图例的 anchor 参数,但我只能找到 titleAnchor。 Chart with Legend "legend": {
我直接从 getmdl.io(组件页面)和所有设备(多台 PC、浏览器、手机等)复制代码,汉堡菜单不在标题中居中。我似乎无法隔离 css 中的菜单图标来重新对齐它。 getmdl.io 上的所有组件代
我正在使用 vega-lite 将一些数据渲染到 map 上。目前,我有这个架构,它呈现附加的图像: { "title": "What's the nearest city to you?",
我正在使用 Angular 4 构建一个 Web 应用程序。对于设计,我使用的是 Material Design lite。但是,我想使用 MDL 实现一个交互式轮播,它给我流畅的外观和感觉,并且与我
它看起来像 Polymer Starter Kit包含比 Material Design Lite 更多的组件,并且现在可用。由于两者都是符合 Material Design 理念的 Google 项
我是一名优秀的程序员,十分优秀!