是否可以在不跳过对析构函数的调用的情况下终止软件执行?例如,在下面的代码中,test由于exit(1)语句,将永远不会调用析构函数.
#include <iostream>
#include <cstdlib>
using namespace std;
class A{
public:
A(){cout << "Constructed.\n";}
~A(){cout << "Destroyed.\n";}
};
void func()
{
//Assuming something went wrong:
exit(1);
}
int main(int argc, char *argv[])
{
A test;
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要的是一种结束程序(从内部func())的方法,它在终止之前调用所有必需的析构函数.到目前为止,我一直在通过func()返回值处理这个问题,如:
bool func()
{
//Assuming something went wrong:
return false;
}
int main(int argc, char *argv[])
{
A test;
if( !func() )return 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,一旦需要将其应用于一系列嵌套函数,它就会很快变得非常烦人(并且代码膨胀).
有没有办法用第二个例子(正确的析构函数调用)实现相同的结果,语法类似于第一个例子(exit(1)无论你在哪里调用)?
从文档中的function表格:
像`quote',但是对于作为函数的对象更喜欢.在字节编译中,`function'导致其参数被编译.`quote'不能那样做.
因此#'(lambda ...),可以启用lambda表单的字节编译.
另一方面,如手册中所述,不再需要.
lambda形式还有另一个作用:它通过使用
function子程序告诉Emacs求值程序和字节编译器它的参数是一个函数 .
[...]以下表格均相同:
(lambda (x) (* x x))
(function (lambda (x) (* x x)))
#'(lambda (x) (* x x))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这使得函数形式无用.
还有其他情况,函数形式会有用吗?
有什么情况下它的存在既不必要也不相同quote?
我已经定义了一个A类,实际属性是无关紧要的.是否可以定义static_cast<class T>(int)运算符的特化以从整数转换为A类?
到目前为止,我一直在通过定义转换函数来做到这一点,例如A convert(int).但我宁愿使用static_cast与其他转换的一致性.
可能吗?
我也想避免隐式转换,这就是为什么我不是通过A的构造函数来做这件事.
例如&&和||进行短路评估。同样,当使用参数调用函数时,所有参数都在调用函数之前构造。
例如,采用以下三个功能
bool f1();
bool f2();
bool f3(bool, bool);
Run Code Online (Sandbox Code Playgroud)
如果我打电话
if( f3(f2(),f1()) )//Do something
Run Code Online (Sandbox Code Playgroud)
然后调用f2和的返回值f1之前被求值f3。但是,如果我使用(常规)operator||代替f3,则上面的代码将等效于
if( f2()||f1() )//Do something
Run Code Online (Sandbox Code Playgroud)
f1如果f2评估结果为true ,则不会进行评估。
我的问题是:是否有可能f3(用户定义的函数使用两个布尔值)以相同的方式运行?如果不是,那么有什么operator||特别之处?
给出一个模板
template <int n>
void f(){...};
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过以下方式将其专门用于特定的值n:
template <>
void f<2>(){...};
Run Code Online (Sandbox Code Playgroud)
但是,有没有一种方法可以让我专注于所有积极的方法n?
我想到了以下几点
template <int n>
void f<n>(){
int dummy[n]; //invalid for n < 0
...
};
Run Code Online (Sandbox Code Playgroud)
因此,n<0此代码无效,编译器将采用先前的定义.不幸的是,我得到的只是一个redefinition of 'void f<n>()'错误.
注意:我猜这可能不受标准支持.我问是否有一些方法(可能是一些模板元编程)来实现这种效果.
我想在emacs-lisp中插入一个特定的yasnippet作为函数的一部分.有没有办法做到这一点?
唯一似乎相关的命令是yas/insert-snippet,但它只是打开一个包含所有选项的弹出窗口,并且文档没有说明通过指定代码段名称来绕过弹出窗口.
我已经将\角色定义为乳胶模式中的单词成分,我对结果非常满意.困扰我的唯一事情就是把一个序列\alpha\beta视为一个单词(当然这是预期的行为).
有没有办法让emacs将特定字符解释为单词"starter"?通过这种方式,它始终被认为是跟随它的单词的一部分,但从不是它之前的单词的一部分.
为清楚起见,这是一个例子:
\alpha\beta
^ ^
1 2
Run Code Online (Sandbox Code Playgroud)
如果该点是,1我按M-d,字符串"\ alpha"应该被杀死.如果点是,2我按M-<backspace>,字符串"\ beta"应该被杀死.
我怎样才能做到这一点?
如果我定义一个包对象
package com.something.else
package object more {
val time = System.currentTimeMillis
// ... other stuff ...
}
Run Code Online (Sandbox Code Playgroud)
然后在源代码中的某处导入.
import com.something.else.more
Run Code Online (Sandbox Code Playgroud)
该对象(及其成员)何时初始化/构建?
换句话说,什么决定了价值more.time?
是否在程序首次启动时进行评估?或者第一次访问它?或者第一次more访问?
关于元数据的文档声称^{:hi 10} 'x等同于(with-meta 'x {:hi 10}),但我看不到。
评估以下内容,
(binding [*print-meta* true]
(prn ^{:hi 10} 'x)
(prn (with-meta 'x {:hi 10})))
Run Code Online (Sandbox Code Playgroud)
打印以下内容,这表明第一种情况没有附加元数据。
x
^{:hi 10} x
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
我有一个Color伴侣对象,它包含一些有用的颜色,我想以下列方式记录它们:
object Color {
/** (.3, .3, .3, 1) */
val darkGrey = Color(.3, .3, .3, 1);
}
Run Code Online (Sandbox Code Playgroud)
你可能已经注意到了,我想要的只是字符串(.3, .3, .3, 1)出现val darkGrey在文档的正下方Color.问题是Scaladoc在第一个时期之前将所有内容都作为一个句子,之前的所有内容都隐藏在可扩展箭头的"内部".所以我得到的是这样的:

这显然是不受欢迎的.理想情况下,要么显示整个字符串,要么隐藏整个字符串.有没有办法实现其中任何一个?
我也尝试了以下两种方法,但没有一种方法可行.
object Color {
/**
* (.3, .3, .3, 1)
*/
val darkGrey = Color(.3, .3, .3, 1);
}
object Color {
/** {{{
* (.3, .3, .3, 1)
* }}}
*/
val darkGrey = Color(.3, .3, .3, 1);
}
object Color {
/** ` (.3, .3, .3, 1) ` …Run Code Online (Sandbox Code Playgroud) 首先,我知道如何编写基本/中级makefile.在我的c ++项目中,我使用的makefile会自动执行很多操作.对我来说最重要的是它使用通配符自动检测所有源文件(始终在同一文件夹中),使用它来预测所有目标文件的名称(和位置),并进行适当编译.
最近我一直试图用我的scala项目达到同样的效果,但我遇到了两个障碍.
com/me/mypack/)中.这是一个问题,因为
Make需要找到这些文件来检查时间戳(我不知道如何自动执行此操作).package object文件)会生成具有不同命名标准的类文件.再次,Make
需要知道这些类文件的位置,我不知道如何自动执行此操作.这样做的结果是每次运行时都会重新编译"有问题"的源文件make(scala的编译时间很长).我想知道如何修复它,而不必手动写出预期的类文件的整个列表.
编辑 作为额外说明:我想避免将源文件放在子目录中.出于几个原因,我喜欢将它们全部保存在同一目录中.
我需要用OpenGL创建椭圆.我发现做到这一点的最简单的方法是使用一个GLUquadric用gluDisk(...),其产生一个圆盘,随着 glScale(...)打开盘插入椭圆形.这种方法唯一明显的问题是,gluDisk一旦glScale被调用,生成的法向量将停止归一化.
这会以任何方式影响照明吗?在这种情况下,OpenGL定义的行为是什么?向量是否自动重新规范化,行为是否未定义,还是其他的?
我正在编写一个存储一组约50.000个字符串的android应用程序,我需要输入如何最好地存储它们.
我的目标是能够以低延迟查询匹配模式(如Hello W*或*m Aliv*)的字符串列表,但避免了大量的初始化时间.
我想到了以下两种方式:
我的"想象"是正确的还是可怕的错误?哪种方式最好?