小编Rav*_*ven的帖子

获得有关每个抛出异常(甚至是已处理的异常)的通知

有没有办法获得有关运行时(处理和未处理)期间抛出的每个异常的通知?

我想要的是一个记录器机制,记录我的程序运行时出现的每个异常.我不想用这个记录器来处理异常,我只想记录抛出异常的事件.
问题是我想要包含所有系统异常,因此每当我抛出一个新异常时都无法调用函数...

我已经阅读了一些内容,ExceptionListener但它们似乎是针对不同的工作.

有谁知道这怎么可能?

java logging exception-handling exception

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

Eclipse:无法创建 SWT 浏览器小部件

我已经在我的 Linux 机器 (KDE Neon 5.15) 上安装了 eclipse (4.10),除了 JavaDoc 之外,一切都运行良好。每当我查看 JavaDoc-hover 时,我都会得到一个纯文本表示,并在底部显示

NOTE: The SWT Browser widget could not be created. This fallback mode doesn't show links and misses other functionality.
Run Code Online (Sandbox Code Playgroud)

进一步的调查使我使用 SWT 浏览器小部件创建了一个最小的 SWT 示例:

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class BrowserTest {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setLayout(new FillLayout());

        Browser b = new Browser(shell, SWT.NONE);
        b.setUrl("www.google.com");

        shell.open();

        while (!shell.isDisposed()) { …
Run Code Online (Sandbox Code Playgroud)

html java eclipse linux

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

为转译而构建的抽象(编程)语言

介绍

我经常遇到这样的情况:库是用特定的编程语言编写的。这很好,如果我想以同一种语言使用该库,但如果我想使用不同的语言,这将是一个问题(这并不意味着可能存在或多或少的 hacky 方式)。
对于某些库,我感觉它们是用特定的编程语言编写的,只是因为任何语言都可以(并且由于作者的个人喜好),这意味着没有使用特定于语言的高级外部第三方库。对于这些情况,我认为如果有某种抽象(编程)语言,库作者可以在其中指定算法,但随后可以将其转换为许多其他编程语言,那就太好了。因此,如果我想使用该库,我可以简单地使用转译器以我选择的语言获取该库。


实际问题

所以我正在寻找一种语言,专门用于转换为最流行的语言(例如 Java、C/C++、Python)。我感兴趣的是是否有人曾经努力创建过这样一种“通用”转译语言。

请注意,我并不是在寻找从一种语言到另一种语言的特定转译器。我想知道是否存在一种(编程)语言,其设计用于可转换为许多不同实际编程语言的源代码。因此,我正在寻找的语言可能甚至无法自行运行(只有转译的代码才是实际的程序)。
虽然我有兴趣了解这种语言存在的一般优点/缺点,但由于 SO 的规则,这也不是这个问题的内容。因此,我要求您不要以这种风格撰写基于意见的答案。

这个问题的答案很可能是不存在这样的语言,但是由于我的研究没有提出任何东西,我想也许这里有人知道这样的语言,我可能会因为它没有被广泛使用而错过用过的。

transpiler

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

消息“错误:使用未声明的标识符‘assert’”

我有一段代码,其中包含一些 Boost 标头。编译后我收到了类似的错误

/usr/local/include/boost/smart_ptr/shared_ptr.hpp:1041:9: error: use of undeclared identifier 'assert'

        BOOST_ASSERT( deleter_.use_count() <= 1 );

        ^

/usr/local/include/boost/assert.hpp:60:29: note: expanded from macro 'BOOST_ASSERT'

# define BOOST_ASSERT(expr) assert(expr)
                                ^
Run Code Online (Sandbox Code Playgroud)

然而,这些错误仅发生在 Windows 和 macOS 上。

明确包含Boost 标头<cassert><assert.h>之前的标头没有效果。

c++ include

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

如何使用GitHub Actions连接MySQL数据库?

在我的 GitHub Action 中,我使用 Linux 运行程序(Ubuntu 18.04 和 20.04),并且我想使用 MySQL 数据库。因此,为了进行设置,我运行一个类似的脚本

sudo apt update
sudo apt install mysql-server

sudo mysql < someInstructions.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我在 GitHub Actions 上运行此脚本时,出现以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
Run Code Online (Sandbox Code Playgroud)

所以我认为MySQL服务器在安装后没有运行(我已验证)。这很奇怪,因为 Ubuntu 软件包的文档明确指出服务器应该在成功安装后运行。

无论如何,我随后sudo systemctl start mysql.service启动了 MySQL 服务器,但现在收到此错误

'Access denied for user 'root'@'localhost' (using password: NO)'
Run Code Online (Sandbox Code Playgroud)

这真的让我感到困惑,因为sudo mysql应该以 root 身份连接到数据库。我验证了这可以在常规 Ubuntu 安装上运行。

有谁知道如何连接到 GitHub Actions 上的 MySQL 数据库?

mysql github-actions

4
推荐指数
2
解决办法
4150
查看次数

Boost Spirit X3:“_val”和“_attr”有什么区别?

我正在研究 Boost Spirit X3,但正在努力完全掌握语义操作中使用x3::_val和之间的区别x3::_attr,以从传递的上下文中提取属性。官方文档指出

_val:对直接或间接调用解析器 p 的最内层规则的属性的引用
_attr:对解析器 p 的属性的引用

这对我没什么帮助。我研究了一些并偶然发现了/sf/answers/4319223961/,其中指出

x3::_val(ctx) 类似于 qi::_val
x3::_attr(ctx) 类似于 qi::_0 (对于简单解析器则为 qi::_1)

但不幸的是,我没能弄清楚什么qi::_valqi::_0/qi::_1,或者更准确地说它们的区别是什么。

最后,我还找到了/sf/answers/3778032191/,其中指出

它们在x3::_val特定x3::_attr情况下的情况取决于 make_attribute/transform_attribute 特征。默认情况下,它们将引用相同的值,直到您具有具有不同属性类型的嵌套规则

这似乎与我迄今为止进行的实验一致——除了我还没有设法_attr_val产生不同的值。

尽管我还无法理解它们的区别,但它似乎与我见过的所有示例相当相关,使用语义动作来计算给定计算的结果(参见例如此处)似乎总是用作_attr更全局的状态,而_val似乎是刚刚解析的事物的即时状态。例如

[](auto& ctx) { _val(ctx) = _val(ctx) * _attr(ctx); }
Run Code Online (Sandbox Code Playgroud)

然而,尽管如此,我仍然不太能够指出这两个属性之间语义上的确切差异。有人可能会尝试重新表述 Boost 的文档并举一个例子来说明差异实际上很重要/可见吗?

c++ boost boost-spirit-x3

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

const 引用和右值引用的写入重载

最近,我发现自己经常遇到这样的情况:只有一个函数将某个对象作为参数。该函数必须复制该对象。

然而,该函数的参数也可能经常是临时的,因此我还想提供该函数的重载,该重载采用右值引用而不是常量引用。

两种重载的区别仅在于它们具有不同类型的引用作为参数类型。除此之外,它们在功能上是等效的。

例如,考虑这个玩具示例:

void foo(const MyObject &obj) {
    globalVec.push_back(obj); // Makes copy
}
void foo(MyObject &&obj) {
    globalVec.push_back(std::move(obj)); // Moves
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否有一种方法可以通过例如根据另一个函数实现一个函数来避免这种代码重复。

例如,我正在考虑根据 move-one 实现复制版本,如下所示:

void foo(const MyObject &obj) {
    MyObj copy = obj;
    foo(std::move(copy));
}
void foo(MyObject &&obj) {
    globalVec.push_back(std::move(obj)); // Moves
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎仍然不理想,因为现在调用 const ref 重载时会发生复制和移动操作,而不是之前所需的单个复制操作。

此外,如果对象不提供移动构造函数,那么这将有效地将对象复制两次(据我所知),这违背了首先提供这些重载的整个目的(尽可能避免复制)。

我确信人们可以使用宏和预处理器将某些东西组合在一起,但我非常希望避免在其中涉及预处理器(出于可读性目的)。

因此,我的问题是:是否有可能实现我想要的目标(有效地仅实现一次功能,然后根据第一个重载实现第二个重载)?

如果可能的话,我想避免使用模板。

c++ rvalue-reference move-semantics perfect-forwarding c++11

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