小编Mal*_*rba的帖子

在不跳过析构函数的情况下停止执行

是否可以在不跳过对析构函数的调用的情况下终止软件执行?例如,在下面的代码中,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)无论你在哪里调用)?

c++ destructor terminate

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

(功能)在Emacs中是否有任何用途?

文档中的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

lisp emacs elisp

7
推荐指数
1
解决办法
700
查看次数

是否可以重载*static_cast*运算符?

我已经定义了一个A类,实际属性是无关紧要的.是否可以定义static_cast<class T>(int)运算符的特化以从整数转换为A类?

到目前为止,我一直在通过定义转换函数来做到这一点,例如A convert(int).但我宁愿使用static_cast与其他转换的一致性.

可能吗?
我也想避免隐式转换,这就是为什么我不是通过A的构造函数来做这件事.

c++ casting

6
推荐指数
3
解决办法
3524
查看次数

如何在用户定义的功能中实施短路评估?

例如&&||进行短路评估。同样,当使用参数调用函数时,所有参数都在调用函数之前构造。

例如,采用以下三个功能

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||特别之处?

c++ short-circuiting

5
推荐指数
1
解决办法
814
查看次数

基于参数的积极性专门化模板

给出一个模板

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>()'错误.

注意:我猜这可能不受标准支持.我问是否有一些方法(可能是一些模板元编程)来实现这种效果.

c++ math templates

5
推荐指数
1
解决办法
675
查看次数

按名称插入yasnippet

我想在emacs-lisp中插入一个特定的yasnippet作为函数的一部分.有没有办法做到这一点?

唯一似乎相关的命令是yas/insert-snippet,但它只是打开一个包含所有选项的弹出窗口,并且文档没有说明通过指定代码段名称来绕过弹出窗口.

emacs yasnippet

5
推荐指数
1
解决办法
739
查看次数

将字符定义为单词边界

我已经将\角色定义为乳胶模式中的单词成分,我对结果非常满意.困扰我的唯一事情就是把一个序列\alpha\beta视为一个单词(当然这是预期的行为).

有没有办法让emacs将特定字符解释为单词"starter"?通过这种方式,它始终被认为是跟随它的单词的一部分,但从不是它之前的单词的一部分.

为清楚起见,这是一个例子:

\alpha\beta
^          ^
1          2
Run Code Online (Sandbox Code Playgroud)

如果该点是,1我按M-d,字符串"\ alpha"应该被杀死.如果点是,2我按M-<backspace>,字符串"\ beta"应该被杀死.

我怎样才能做到这一点?

syntax emacs

5
推荐指数
1
解决办法
500
查看次数

包对象何时初始化?

如果我定义一个包对象

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访问?

scala packages

5
推荐指数
1
解决办法
348
查看次数

为什么^ metadata'符号不起作用?

关于元数据文档声称^{: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)

难道我做错了什么?

metadata clojure read-eval-print-loop

5
推荐指数
1
解决办法
117
查看次数

scaladoc中的逐字代码

我有一个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)

scala scaladoc

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

使用Makefile管理scala项目

首先,我知道如何编写基本/中级makefile.在我的c ++项目中,我使用的makefile会自动执行很多操作.对我来说最重要的是它使用通配符自动检测所有源文件(始终在同一文件夹中),使用它来预测所有目标文件的名称(和位置),并进行适当编译.

最近我一直试图用我的scala项目达到同样的效果,但我遇到了两个障碍.

  • 属于包的已复制类文件存储在子目录(如com/me/mypack/)中.这是一个问题,因为 Make需要找到这些文件来检查时间戳(我不知道如何自动执行此操作).
  • 某些源文件(例如定义的package object文件)会生成具有不同命名标准的类文件.再次,Make 需要知道这些类文件的位置,我不知道如何自动执行此操作.

这样做的结果是每次运行时都会重新编译"有问题"的源文件make(scala的编译时间很长).我想知道如何修复它,而不必手动写出预期的类文件的整个列表.

编辑 作为额外说明:我想避免将源文件放在子目录中.出于几个原因,我喜欢将它们全部保存在同一目录中.

scala makefile

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

在OpenGL中未规范化的法向量的行为是什么?

我需要用OpenGL创建椭圆.我发现做到这一点的最简单的方法是使用一个GLUquadricgluDisk(...),其产生一个圆盘,随着 glScale(...)打开盘插入椭圆形.这种方法唯一明显的问题是,gluDisk一旦glScale被调用,生成的法向量将停止归一化.

这会以任何方式影响照明吗?在这种情况下,OpenGL定义的行为是什么?向量是否自动重新规范化,行为是否未定义,还是其他的?

c++ opengl

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

如何存储大的字符串列表以优化初始化时间和搜索速度

我正在编写一个存储一组约50.000个字符串的android应用程序,我需要输入如何最好地存储它们.

我的目标是能够以低延迟查询匹配模式(如Hello W**m Aliv*)的字符串列表,但避免了大量的初始化时间.

我想到了以下两种方式:

  1. 一个java集合.我认为java集合应该可以快速搜索,但鉴于它相当大,我担心它可能会对应用程序初始化时间产生很大影响.
  2. SQLite数据库中的表.我想这在初始化时会很容易(因为它不需要加载到内存中),但是我担心查询会产生一些相关的延迟,因为它需要启动一个SQLite进程(或者不是吗? ).

我的"想象"是正确的还是可怕的错误?哪种方式最好?

java android

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