- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为家庭作业,我得到了一个骨架类,并被告知从源文件的头文件中实现功能。我不允许更改 header ,因为它不会被打开,只有实现文件。
但是,有一个函数我真的很想添加到类中( operator() 函数)。如何在不更改 header 的情况下将其声明为类的一部分?
我无法添加友元函数(需要更改 header 中的类定义)。我不能只在源代码的顶部实现它(行外定义不匹配......)。我不能在顶部重新声明类(类的重新定义)。
这可能吗?这样做可以避免将函数体复制到代码中的 4 个不同位置。
仅供引用,它是一个循环双向链表的访问器。 operator[] 用于访问列表元素元素,我需要一个返回列表元素指针的访问器。作为引用,运算符如下所示:
// CANT CHANGE THIS, ITS IN THE HEADER
Elem& operator[]( int i ) const;
// THIS IS WHAT I WANT THOUGH
// ITS NOT IN THE HEADER, SO I CANT USE IT
CNode * CircleList::operator()( int i ) {
CNode * n = this->header->next;
if( i < 0 ) {
while( i < 0 ) {
n = ( n->prev == this->header ) ? ( n->prev->prev ) : ( n->prev );
++i;
}
} else if( i > 0 ) {
while( i > 0 ) {
n = ( n->next == this->header ) ? ( n->next->next ) : ( n->next );
--i;
}
}
return n;
}
(大部分)有问题的 header :
#include "point.h"
#include <stdlib.h>
#include <stdio.h>
typedef Point Elem;
class CNode{
private:
Elem elem;
CNode * next;
CNode * prev;
friend class CircleList;
};
class CircleList {
public:
CircleList();
~CircleList();
Elem& operator[](int i) const;
void setElemAt (int i, const Elem newElem) const;
private:
CNode * header;
int _size;
};
最佳答案
However, there is a function I would really like to add to the class ( the
operator()
function ). How can I declare it to be part of the class without changing the header?
基本上,您不能。
你可以做的是:
operator()
。当然,当其他代码必须使用具有值语义的原始类时,这是行不通的。拿出黑魔法,也称为预处理器,并将 header 包装在您自己的 header 中 with something like那:
#define public \
public: void operator()(void); public
// original header content
struct SomeClass {
// stuff
public: // We need this once, otherwise we're screwed
// other stuff
};
// end original header content
#undef public
不过,这显然破坏了 ABI 与通过其原始 header 使用 SomeClass
的其他代码的兼容性。
Doing this will save me copying the function body to 4 different places in the code.
为什么你不能只写一个自由函数 call_it
而不是 object()
你在这 4 个中写 call_it(object)
地方?
关于c++ - 在实现文件中添加成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39498218/
test = (function(){var key = 200; return {getKey : function(){return key} }; })(); test.
如果这个问题可能一直被问到,我很抱歉,但我进行了搜索,但找不到足够的答案。 如果公共(public)成员/方法正在访问私有(private)成员/字段,如何禁用它们的继承? 所以考虑一下: publi
重要的澄清:一些评论者似乎认为我是从 union 复制的。仔细查看 memcpy,它从一个普通的旧 uint32_t 地址复制而来,该地址不包含在 union 中。另外,我正在(通过 memcpy)复
spinner 通常只显示一个字符串,在我想分配 IDpersonne 和 Name 的情况下,旋转器必须告诉我名字。当我得到选定的项目时,我必须得到 ID。我该怎么做? 最佳答案 我假设您已将项目排
A 类的实例是 B 类的公共(public)成员。B 类的实例也是 A 的公共(public)成员。在什么情况下可能需要这种实现?我的意思是是否有一个或多个标准场景需要这种实现方式?更具体的细节:我有
我如何设置我的 web.config 以使用表单例份验证,将成员身份提供程序设置为 ActiveDirectoryMembershipProvider 并使用内置登录控件。这样我就可以使用有效的事件目
这个问题已经有答案了: Should methods in a Java interface be declared with or without a public access modifier?
因此根据定义,类中的私有(private)数字在序列化时以类名作为前缀。这对我来说是一个问题,我希望能够序列化/保存/反序列化一个确切的对象,但是 php 所做的是给我另一个 classname+va
我实现了一个成员? clojure 中的函数如下: (defn member? [item seq] (cond (empty? seq) false (= item (first
我在这里的问题似乎总是与使用函数有关。它仍然让我困惑!在本教科书练习中,我被要求按值传递结构,然后调整它并按引用传递。最初我设计的代码是在 main 中完成所有工作。现在我正在传递值。所以我添加了新函
所以我有这些变量 List files, images = new List(); string rootStr; 还有这个线程函数 private static int[] thread_searc
我对 C++ 模板和尝试弄清楚部分模板特化还比较陌生。我正在使用模板实现几个相关的数据结构:用于概率存在/不存在查询的布隆过滤器(基于位数组),以及用于丰度查询的计数布隆过滤器(带有整数数组)。我从以
例如在 java 中,我在外部类和内部类中声明并初始化了一个 JButton,我决定在某些情况下将其隐藏,这是一种安全的编程实践吗? 最佳答案 内部类的全部目的是它们可以访问到环绕内部类的外部类。 所
我有一个使用库进行通信的类: class Topic { Topic( Type T, String name ); }; class Reader { Reader (Topic, Stri
我在两个单独的文件中有以下代码。 package animal; public class Frog { protected void ribbit() { Syste
我有一个分数列表。使用这些,我需要从 redis 排序集中提取值。 我知道我可以使用 zrangebyscore - 但如果我提供的列表中的分数不连续怎么办?在这种情况下,我不能依赖 zrangeby
过去几年我一直被 C# 编码宠坏了,现在我又回到了 C++ 并发现我在处理本应很简单的东西时遇到了麻烦。我正在为 gamedev 使用名为 DarkGDK 的第三方库(任何以 db 为前缀的命令),但
我正在关注 Brian Harvey 从 2011 年开始在 UC Berkeley site 上的 SICP 讲座。 .他正在使用 STk interpreter教这门课,我正在使用带有 DrRac
在这段代码中,为什么在运算符重载中无法访问我的类的私有(private)字段? (请注意,这只是一个 MRE,不是完整代码) template class Frac template Frac o
在命名命名空间类中,我将一个类(位于全局命名空间中)声明为友元。 但是,后一个类不能访问前一个类的私有(private)成员。为什么是这样?有什么办法可以解决吗? Bob.h namespace AB
我是一名优秀的程序员,十分优秀!