小编Mat*_*agé的帖子

静态链接图书馆的利弊是什么?

我想发布一个我开发的应用程序,作为Linux和Windows的业余爱好.此应用程序依赖于boost(以及可能的其他库).这种应用程序(国际象棋引擎)的规范是仅提供可执行文件和可能的一些帮助文件.

我认为静态链接库是个好主意,因此可执行文件不会有任何依赖.因此,最终用户可以将可执行文件放在目录中并开始使用它.

然而,在网上进行一些研究时,我发现了一些关于静态链接库的负面评论,有些甚至认为具有静态链接库的应用程序几乎不可移植,这意味着它只能在我的高度相似系统的系统上运行.

那么静态链接库的优点和缺点是什么?

我已经知道可执行文件会更大.但我不明白为什么它会使我的应用程序不那么便携.

linux linker static-libraries static-linking

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

如何测试所有位是否置位或所有位都不是?

使用按位运算符如何测试整数的n个最低有效位是全部还是全部未设置.

例如,if n = 3我只关心3个最低有效位,测试应该为0和7返回true,对于0到7之间的所有其他值都为false.

我当然可以这样做if x = 0 or x = 7,但我更喜欢使用按位运算符.

如果可以调整技术以考虑掩码定义的所有位,则奖励点.

澄清:

如果我想测试是否设置了第一或第二位,我可以if ((x & 1 != 0) && (x & 2 != 0)).但我可以做到"更有效率" if ((x & 3) != 0).

我试图找到一个这样的"黑客"来回答这个问题"是否所有匹配此掩码的x都设置了或者都未设置?"

简单的方法是if ((x & mask) == 0 || (x & mask) == mask).我想在没有||的单个测试中找到一种方法 运营商.

c c++ bit-manipulation

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

scons中的env.Clone()不执行深层复制

在SCons脚本中,我创建了一个基础环境,我从中导出了其他环境.像这样的东西:

base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']

opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
Run Code Online (Sandbox Code Playgroud)

这样,我可以从基础环境创建更多环境(release/debug/instrumented/pgo).在SCons文档中,它说env.Clone()执行env的深层副本.但事实上它似乎没有用.因为在示例中,基本环境将应用-DNDEBUG和-O3标志.

我做错了什么?

编辑:这是真正的代码.这段代码中有两个打印语句,我认为它们应该打印相同的东西,但它们不会.输出如下:

# -*- coding: utf-8 -*-

import os.path
import glob

local_env = Environment()

local_env['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
local_env.Append(LIBS = ['pthread', 'boost_thread', 'boost_filesystem', 'boost_program_options', 'boost_iostreams'])

opt = local_env.Clone()

opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']

print opt['CXXFLAGS']

instr = opt.Clone()
instr['CXXFLAGS'] += ['-fprofile-arcs']
instr['LIBS'] += ['gcov']

print opt['CXXFLAGS']
Run Code Online (Sandbox Code Playgroud)

输出 :

|| scons: Reading SConscript files ...
|| -DBOOST_HAS_PTHREAD -D__STDC_CONSTANT_MACROS -DFILELOG_MAX_LEVEL=4 -Wall -DNDEBUG -O3 …
Run Code Online (Sandbox Code Playgroud)

scons

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

如何强制控件验证自己?

我有一些控件和一个ErrorProvider的winforms.控件的验证事件用于验证数据并将错误报告给ErrorProvider(如果有).当用户向控件输入错误的信息并离开控件时,这项工作非常有用.

但是,如果用户在未输入任何数据的情况下单击,则不会进行验证.当用户单击确定时,有没有办法强制验证所有控件?在某些验证失败的情况下,我如何知道并取消OK事件?

.net validation winforms

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

是否可以在GridView上进行自定义排序

我需要对需要复杂排序的GridView(Not DataGridView,它不是同一件事)进行排序,我不知道它是如何完成的.我有两列,一列包含日期,另一列包含优先级.

如果日期小于或等于今天的日期.我想首先按优先顺序排序,然后按日期排序.如果日期大于今天的日期,我想先按日期排序,然后按优先顺序排序.

假设totay是2010年1月13日,这种方式订购的一些数据可能看起来像这样

   date       priority  Explanation
-----------   --------  --------------------------------------------
2010-jan-13      3      This comes first because it has the higer priority of all items whith a date <= today
2010-jan-12      2      Since this items and the next have the same priority they're ordered by date
2010-jan-13      2
2010-jan-14      5      This item and the followings have date > today, so they are ordered by date then by priority.
2010-jan-14      0
2010-jan-15      5
2010-jan-16      5
Run Code Online (Sandbox Code Playgroud)

无论如何,还是通过手动或通过传递比较仿函数来对网格视图进行排序?

编辑:数据源是DataTable.

asp.net sorting gridview

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

如何在不从.ShowDialog返回的情况下隐藏模态对话框?

我在vb.net中有一个应用程序,它以子函数开始做一些事情并决定它是否显示自己.当它显示自己时,它通过调用来实现dialog.ShowDialog().

dialog.ShowDialog()返回时,应用程序做一些清洁和两端.

我想找到一种暂时隐藏对话框(将其发送到系统托盘)而无需从ShowDialog()函数返回的方法.但是,只要me.Hide()在表单的代码中执行a ,表单就会被有效隐藏,但ShowDialog()函数会返回并关闭进程.

我理解这是预期的行为.所以我的问题是如何才能获得这种效果?这是启动一个可以隐藏的对话框,并阻塞,直到用户真的想要退出应用程序.

.net modal-dialog winforms

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

为什么VC++无法优化整数包装器?

在C++中,我正在尝试围绕64位整数编写包装器.我的期望是,如果正确编写并且所有方法都被内联,那么包装器应该与真实类型一样高效.在SO上回答这个问题似乎与我的期望一致.

我写了这段代码来测试我的期望:

class B
{
private:
   uint64_t _v;

public:
   inline B() {};
   inline B(uint64_t v) : _v(v) {};

   inline B& operator=(B rhs) { _v = rhs._v; return *this; };
   inline B& operator+=(B rhs) { _v += rhs._v; return *this; };
   inline operator uint64_t() const { return _v; };
};

int main(int argc, char* argv[])
{
   typedef uint64_t;
   //typedef B T;
   const unsigned int x = 100000000;

   Utils::CTimer timer;
   timer.start();

   T sum = 0;
   for (unsigned int i = …
Run Code Online (Sandbox Code Playgroud)

c++ optimization wrapper visual-c++

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

如何在Javascript中设计自定义控件(可能使用jQuery)

我想在javascript中创建一个自定义控件.目标是创建一个包含方法,属性和事件的构建块,并将其渲染为div.

一个这样的控件的一个例子是日历.它将呈现为div,它将具有定义如何显示以及选择或突出显示日期的属性,它将具有更改当前月份或选择某个日期的方法,并且当点击一天时它将引发事件或当前月份由用户输入更改.

我可以想到很多方法来实现这个,我不确定什么是最好的方法.我似乎记得用属性和方法扩充DOM元素是一件坏事,所以我排除了这一点.一个jQuery插件似乎是一个好主意,但是我不确定是否适合为我的控件所拥有的每个方法创建一个插件,以便我可以像以下一样使用它:

$('#control').method1();
$('#control').method2();
Run Code Online (Sandbox Code Playgroud)

如果我使用jQuery,我在哪里存储我的控件的私有数据?

我得到的另一个想法是创建一种新的对象,它可以引用div,它可以渲染它的元素.

那么首选的方法是什么呢?如果我可以,我想这样做作为一个jQuery插件,但我需要guidlines如何创建方法和存储私人数据的位置.我在jQuery网站上使用了插件/创作,但在这方面它并没有那么大的帮助.

javascript jquery

6
推荐指数
2
解决办法
8090
查看次数

如何让MS-Access为我的查询选择不同/正确的执行计划

我有一个相对简单的查询问题和执行计划Access选择它.

查询是这种形式

SELECT somethings
FROM A INNER JOIN (B INNER JOIN (C INNER JOIN D ON ...) ON ...) ON ...
WHERE A.primaryKey= 1 AND D.d = 2;
Run Code Online (Sandbox Code Playgroud)

C和D的行数相对较少.A和B有几千行.

该查询返回2行(不确定这是否相关)真的很慢.它运行17秒.如果我删除AND D.d = 2where子句的一部分,查询现在返回4行并立即运行.

所以我的理解是JET引擎可以立即运行查询而不在Dd上使用过滤器,然后立即执行所述过滤器(仅过滤4行).因此,使用D.d = 2过滤器运行查询不应该太长.

我试图创建一个没有过滤器的子查询,并将其包含在另一个只过滤结果的查询中,但它仍然很慢.我的猜测是JET引擎足够聪明以"扁平化"子查询,因此结果是相同的.

因为我无法按照我的意愿运行查询,所以我使用了JETSHOWPLAN,以便Access输出它的执行计划.这是我发现的:

对于快速查询(没有D.d = 2),查询计划的第一步是A.primaryKey = 1在A表上应用过滤器.这导致超过30000的数据集为1行.然后,连接似乎是使用索引从A到D执行,数据集永远不会超过4行.

慢查询似乎以逆转顺序执行.首先连接D和C然后D.d = 2进行测试.之后,执行从C到A的连接.通过这种方式,需要从D到C,从C到B以及从B到A连接的数据要大得多.当执行所有JOIN并且执行之前A.primaryKey=1,数据集将具有120K行.

有没有办法在Access上强制执行正确的查询计划?

我希望我很清楚.如果我发布查询计划,请告诉我.我没有,因为它们很大.

提前致谢,

熔点

ms-access sql-optimization sql-execution-plan

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

围绕 C++ 库创建一个可由 C 链接器链接的 C 包装器

根据这个问题的答案(为面向对象的 C++ 代码开发 C 包装器 API),我设法为我的 C++ 代码编写了一个 C 包装器。

我想将我的包装器编译并链接到一个静态库(使用 g++ 编译),该库只能使用 gcc (而不是 g++)使用、编译和链接。这样,库的用户就不必关心库是用 C++ 编写的。

这有可能吗?

c++ gcc g++ static-libraries

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