我很有兴趣了解除try/catch及其变体之外的编程语言中的一些其他错误处理方法.
有谁知道这种错误处理的一些有趣案例?
我希望在OSGi容器(apache-servicemix-4.4.1-fuse-06-03)中运行一个Akka项目,但是在安装依赖库时遇到一些麻烦.我已安装akka-actor并config如下:
osgi:install -s mvn:com.typesafe.akka/akka-actor/2.1-SNAPSHOTosgi:install -s mvn:com.typesafe/config/0.4.1但我无法安装scala-library(需要v2.9.2).我尝试创建自己的捆绑使用maven-bundle-plugin但无效,并已谷歌搜索多年.
任何帮助将不胜感激.
这是我经常遇到的问题.以下示例说明了它:
struct A {
int m_SomeNumber;
};
struct B {
B( A & RequiredObject );
private:
A & m_RequiredObject;
};
struct C {
C( );
private:
A m_ObjectA;
B m_ObjectB;
};
Run Code Online (Sandbox Code Playgroud)
C看起来像这样的构造函数的实现:
C::C( )
: B( m_ObjectA )
{ }
Run Code Online (Sandbox Code Playgroud)
由于未定义初始化顺序,因此在调用m_ObjectA构造函数时可能未初始化m_ObjectB,从而导致未定义的行为.强制某个初始化顺序的一种方法是使成员指针并在构造函数体中初始化它们,从而强制正确的顺序,但由于几个原因这很难看.有没有办法使用构造函数的初始化列表强制某个初始化顺序?如果没有,你有任何其他建议如何处理这个.
我使用pythons内置sqlite3模块来访问数据库.我的查询执行150000个条目的表和40000个条目的表之间的连接,结果再次包含大约150000个条目.如果我在SQLite管理器中执行查询需要几秒钟,但如果我从python执行相同的查询,它在一分钟后就没有完成.这是我使用的代码:
cursor = self._connection.cursor()
annotationList = cursor.execute("SELECT PrimaryId, GOId " +
"FROM Proteins, Annotations " +
"WHERE Proteins.Id = Annotations.ProteinId")
annotations = defaultdict(list)
for protein, goterm in annotationList:
annotations[protein].append(goterm)
Run Code Online (Sandbox Code Playgroud)
我做了fetchall公正的测量执行时间.有没有人对性能的巨大差异有解释?我在Mac OS X 10.6.4上使用Python 2.6.1.
编辑
我手动实现了连接,这样可以更快地完成.代码如下所示:
cursor = self._connection.cursor()
proteinList = cursor.execute("SELECT Id, PrimaryId FROM Proteins ").fetchall()
annotationList = cursor.execute("SELECT ProteinId, GOId FROM Annotations").fetchall()
proteins = dict(proteinList)
annotations = defaultdict(list)
for protein, goterm in annotationList:
annotations[proteins[protein]].append(goterm)
Run Code Online (Sandbox Code Playgroud)
因此,当我自己获取表格然后在python中进行连接时,大约需要2秒钟.上面的代码需要永远.我在这里错过了什么吗?
第二次编辑
我现在尝试使用apsw,它工作正常(代码根本不需要更改),性能很棒.我仍然想知道为什么这个sqlite3-module 这么慢.
我有一个地图,其中字符串作为键,文件名列表作为值.例如:Map(firstDir, list(file1,file2,file3))
我知道通过使用以下代码我可以打印String的值
{
cout << "Key: " << pos->first << endl;
cout << "Value:" << pos->second << endl;
}
Run Code Online (Sandbox Code Playgroud)
但如果pos->second包含List,如何显示?
假设我有以下内容:
#include <iostream>
#include <string>
template<class T>
class base
{
public:
void print()
{
T t = get();
std::cout << t << std::endl;
}
virtual T get() const
{
// assumes T can be constructed from, say, -1
T t = -1.0;
return t;
}
};
class derived : public base<std::string>
{
public:
virtual std::string get() const
{
// this is a silly example, but one can
// imagine that what we return here could
// depend on data members …Run Code Online (Sandbox Code Playgroud) 我正在使用一个定义如下常量的库:
#define SOME_BIG_CONSTANT 0x0000000100000000
Run Code Online (Sandbox Code Playgroud)
这个文字太大而无法表示long,因此任何使用该宏的程序都无法编译(使用gcc 4.1.2 for VxWorks).(非标准,但由此编译器支持)解决方案可以将后缀添加ull到文字中:
#define SOME_BIG_CONSTANT 0x0000000100000000ull
Run Code Online (Sandbox Code Playgroud)
但是,这需要我修改库标题,我宁愿不这样做.我吮吸宏,所以我的问题是,如何定义一个可以添加该后缀的宏,我可以像这样调用:
ULL_(SOME_BIG_CONSTANT)
Run Code Online (Sandbox Code Playgroud)
哪个会扩展到:
0x0000000100000000ull
Run Code Online (Sandbox Code Playgroud) 我想在速度和准确性方面写出好的陈述.如果我没记错这一行:b=(a+1)*a产生一个比这更好的程序:b=(a^2+a).
这只是一个例子,可能是错的,但现在没关系,问题是:我在哪里可以找到科学计算的良好实践纲要?
这个对另一个问题的回答表明,作为通过反思找到匿名类的一种解决方法,只需尝试所有名称,从开始...$1计算直到找不到更多.这是保证找到所有内部类,还是有可能从0开始或者某些数字被遗漏(无论出于何种原因)?
根据文档,在 AWS Transfer SFTP 服务器中为用户创建范围缩小策略时,可以使用策略变量${transfer:HomeFolder}和${transfer:HomeDirectory}该策略。但是,我找不到任何关于两者之间区别的描述。有人可以解释或链接到相关文档吗?
c++ ×5
akka ×1
amazon-s3 ×1
aws-policies ×1
aws-sftp ×1
c++-faq ×1
class ×1
constructor ×1
gcc ×1
java ×1
macros ×1
math ×1
optimization ×1
osgi ×1
performance ×1
polymorphism ×1
python ×1
scala ×1
sqlite ×1
templates ×1