我想发布一个我开发的应用程序,作为Linux和Windows的业余爱好.此应用程序依赖于boost(以及可能的其他库).这种应用程序(国际象棋引擎)的规范是仅提供可执行文件和可能的一些帮助文件.
我认为静态链接库是个好主意,因此可执行文件不会有任何依赖.因此,最终用户可以将可执行文件放在目录中并开始使用它.
然而,在网上进行一些研究时,我发现了一些关于静态链接库的负面评论,有些甚至认为具有静态链接库的应用程序几乎不可移植,这意味着它只能在我的高度相似系统的系统上运行.
那么静态链接库的优点和缺点是什么?
我已经知道可执行文件会更大.但我不明白为什么它会使我的应用程序不那么便携.
使用按位运算符如何测试整数的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).我想在没有||的单个测试中找到一种方法 运营商.
在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) 我有一些控件和一个ErrorProvider的winforms.控件的验证事件用于验证数据并将错误报告给ErrorProvider(如果有).当用户向控件输入错误的信息并离开控件时,这项工作非常有用.
但是,如果用户在未输入任何数据的情况下单击,则不会进行验证.当用户单击确定时,有没有办法强制验证所有控件?在某些验证失败的情况下,我如何知道并取消OK事件?
我需要对需要复杂排序的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.
我在vb.net中有一个应用程序,它以子函数开始做一些事情并决定它是否显示自己.当它显示自己时,它通过调用来实现dialog.ShowDialog().
当dialog.ShowDialog()返回时,应用程序做一些清洁和两端.
我想找到一种暂时隐藏对话框(将其发送到系统托盘)而无需从ShowDialog()函数返回的方法.但是,只要me.Hide()在表单的代码中执行a ,表单就会被有效隐藏,但ShowDialog()函数会返回并关闭进程.
我理解这是预期的行为.所以我的问题是如何才能获得这种效果?这是启动一个可以隐藏的对话框,并阻塞,直到用户真的想要退出应用程序.
在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) 我想在javascript中创建一个自定义控件.目标是创建一个包含方法,属性和事件的构建块,并将其渲染为div.
一个这样的控件的一个例子是日历.它将呈现为div,它将具有定义如何显示以及选择或突出显示日期的属性,它将具有更改当前月份或选择某个日期的方法,并且当点击一天时它将引发事件或当前月份由用户输入更改.
我可以想到很多方法来实现这个,我不确定什么是最好的方法.我似乎记得用属性和方法扩充DOM元素是一件坏事,所以我排除了这一点.一个jQuery插件似乎是一个好主意,但是我不确定是否适合为我的控件所拥有的每个方法创建一个插件,以便我可以像以下一样使用它:
$('#control').method1();
$('#control').method2();
Run Code Online (Sandbox Code Playgroud)
如果我使用jQuery,我在哪里存储我的控件的私有数据?
我得到的另一个想法是创建一种新的对象,它可以引用div,它可以渲染它的元素.
那么首选的方法是什么呢?如果我可以,我想这样做作为一个jQuery插件,但我需要guidlines如何创建方法和存储私人数据的位置.我在jQuery网站上使用了插件/创作,但在这方面它并没有那么大的帮助.
我有一个相对简单的查询问题和执行计划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上强制执行正确的查询计划?
我希望我很清楚.如果我发布查询计划,请告诉我.我没有,因为它们很大.
提前致谢,
熔点
根据这个问题的答案(为面向对象的 C++ 代码开发 C 包装器 API),我设法为我的 C++ 代码编写了一个 C 包装器。
我想将我的包装器编译并链接到一个静态库(使用 g++ 编译),该库只能使用 gcc (而不是 g++)使用、编译和链接。这样,库的用户就不必关心库是用 C++ 编写的。
这有可能吗?
c++ ×3
.net ×2
winforms ×2
asp.net ×1
c ×1
g++ ×1
gcc ×1
gridview ×1
javascript ×1
jquery ×1
linker ×1
linux ×1
modal-dialog ×1
ms-access ×1
optimization ×1
scons ×1
sorting ×1
validation ×1
visual-c++ ×1
wrapper ×1