因此,在研究了它到处之后,我似乎无法找到如何创建类箭头操作符,即
class Someclass
{
operator-> () /* ? */
{
}
};
Run Code Online (Sandbox Code Playgroud)
我只需要知道如何使用它并适当地使用它. - 它的投入是什么? - 它返回什么? - 我如何正确声明/原型化?
我想知道是否有一种简单的方法来编写c ++类函数的别名.例如,如果我有一些list容器对象,那么逻辑函数就是
int list::length() { return len; }
Run Code Online (Sandbox Code Playgroud)
但程序员可能使用的另一个逻辑别名可能是
int list::size() { return len; }
Run Code Online (Sandbox Code Playgroud)
因此,有没有任何方法可以创建list::size()别名list::length(),使其在编译时不重复,而是引用相同的函数?
我已经读过你可以这样做了#define,但是我不想在某个地方完全超出范围的其他代码名称(即'size'变量)引起任何混淆.
我还读过函数指针可以修复它,但这不是一个别名(因为它必须应用去引用),也不能给函数指针一个声明,给用户一个令人困惑的帮助线(我想),加上混乱,如果我需要将我的代码嵌套在另一个对象中(我必须调整范围).
我的一个猜测是,大多数优化编译器将以下内容作为直接函数别名:
inline int list::length() { return len; }
inline int list::size() { return length(); }
Run Code Online (Sandbox Code Playgroud)
或者,c ++有任何严格的"别名"语法吗?(我找不到任何 - 不确定)
那么,这样做最有效的方法是什么?
编辑:我接受了答案只是为了结束这个问题,因为这只是我的一个好奇心.任何有良好信息的人,请添加评论或回答,我甚至可能会改变我的答案.
我有一个 HTML 输入。当用户在其中输入内容时,我设置了“输入”事件来处理将输入更新为用户输入内容的过滤版本(以及更新选择开始和选择结束以获得流畅的用户体验)。为了达到适当的效果,这种情况会不断发生。
然而,我注意到,每当 JS 通过 设置输入的值时input.value = '...';,输入的撤消历史记录就会消失。也就是说,在聚焦的情况下按 Ctrl-Z 不再返回到之前的状态。
有什么方法可以提供输入自定义撤消历史记录,或者以其他方式防止它丢失历史记录,同时仍然更改其值?
这是我的问题的一个最小示例:
输入顶部输入(基本在每个字符之间添加句点)后,Ctrl-Z 不会撤消。
<body>
<input type="text" id="textbox" placeholder="No undo"/><br/>
<input type="text" id="textbox2" placeholder="Undo"/>
<script>
var tbx = document.getElementById("textbox");
tbx.addEventListener('input', () => {
tbx.value = tbx.value + '.'
});
</script>
</body>Run Code Online (Sandbox Code Playgroud)
所以,我知道静态函数是文件本地的函数.因此,无法从其他文件访问它们.这也适用于课程吗?我已经阅读了很多关于如何static class不声明类包含纯静态成员和方法(很明显)的争议,但无法找到任何提及是否会声明该类在本地可访问的类文件范围,更合乎逻辑.
如果它没有,那么使用匿名命名空间怎么样,我听说过也可以用来声明文件本地函数?
我有一个内存泄漏的问题.我有一个基类指针.从中,我new用来分配不同的派生类.然后,当我尝试delete使用引用(不是类型转换)的那些类时,我得到内存泄漏.我研究了这个问题,发现我应该在基类中添加一个虚拟析构函数,但是我尝试了这个并且仍然有内存泄漏; 也就是说,根据我的任务管理器,每次使用基类指针分配和删除派生类时,内存使用量会继续增加.我试图使它成为一个抽象的析构函数,并在派生类中添加了析构函数,但是我得到了一个未定义的引用错误.我也尝试将指针类型转换为派生类指针delete,但显然这会使程序崩溃.
有谁知道我应该怎么做?
示例代码:
class A {
public:
A();
~A() {};
virtual ~A(); /*or*/
virtual ~A()=0; /*or*/
/*or nothing?*/
}
class B: private A {
public:
B();
~B() {}; /*this?*/
/*or nothing?*/
}
Run Code Online (Sandbox Code Playgroud) 因此,通过以下代码,我向自己证明了嵌套函数确实获得了外部函数的参数的副本:
var o = {};
(function(a,b,c,x){
x.f = function(){
return a.toString()+b.toString()+c.toString();
}
})(7,4,2,o);
o.f();
Run Code Online (Sandbox Code Playgroud)
代码产生
742
Run Code Online (Sandbox Code Playgroud)
这意味着该o.f函数从匿名函数中获取a,b和c的副本.否则,我会得到undefinedundefinedundefined
我的问题是,
因此,对于我的生活,我无法找到ExtendScript的UnitValue对象的组件的明确细分.我发现的每个来源都与Adobe有关,并没有解释它.我真的希望对它有一个完整的参考,但如果没有人能找到它,我至少需要回答几个问题.
首先,它的构造函数是什么?
我已经看到UnitValue(10,'px')哪些是有意义的,但我也看过UnitValue(20,20)
第二,你怎么能从一个单位转换到另一个单位?
第三,你如何找到它的价值和单位?
我想我已经看到uv.value但没有得到单位
最后,正如我的标签所示,这是Adobe,当然,因为我从未见过或听说过使用ExtendScript的任何其他程序.
所以,我环顾四周,但找不到从文件末尾删除字节而不重写整个文件的方法.我发现一个truncate函数适用于linux,但没有为windows找到任何东西.现在,显然,要扩展文件,我可以用空字节填充结尾,但是为了减少文件的大小,是否真的需要在Windows上重写整个文件?或者是否有一个函数,可能在windows.h,允许我,像truncate在Linux上,重新分配文件的大小?
编辑: 我刚刚找到该功能_chdir(int,long),我正在阅读如何使用它.
编辑: 而且,为什么确实fstream遗漏了这个重要的功能?
编辑: 好的,所以它似乎_chdir()不起作用(我忘了提这个,顺便说一句),因为该函数必须支持大于4 GB的文件 - 即,我使用的是64位文件指针.我认为这将是固有的,但在阅读了论据后chsize,长度不是size_t.
我对如何创建两个相互引用的结构感到困惑。我找不到任何像以前问过的问题。
所以,我知道这会编译得很好:
struct MyStruct {
MyStruct* p;
};
Run Code Online (Sandbox Code Playgroud)
但是,例如,
struct A {
B* pBstruct;
};
struct B {
A* pAstruct;
};
Run Code Online (Sandbox Code Playgroud)
这不会编译。
我正在尝试这样做,但我的编译器不会让我:
struct {
const char* string = "some text";
} myAnonymousStruct;
Run Code Online (Sandbox Code Playgroud)
我相信这是因为在结构声明中不能进行任何分配 - 它们应该是在函数或其他方面进行的.但我真的甚至不允许分配const char*变量吗?
如果有人能让我知道我错过了什么,我真的很感激.谢谢
c++ ×7
class ×3
javascript ×2
scope ×2
struct ×2
adobe ×1
alias ×1
const-char ×1
extendscript ×1
filesize ×1
function ×1
html-input ×1
memory-leaks ×1
polymorphism ×1
recursion ×1
static ×1
truncate ×1
undo ×1
windows ×1