我使用ADO Connection OpenSchema()调用以各种方式成功从SQL服务器上托管的数据库中提取列定义,因此我可以在另一个SQL数据库中以编程方式重新创建这些表.到现在为止还挺好.
使用多个视图进行与上表的主要交互; 虽然OpenSchema()能够以与返回表的列定义相同的方式返回视图的列定义,但缺少一小部分信息 - 视图中的列映射到的基础表中的哪个表和列.
我尝试使用ADOX目录视图访问用于创建视图的SQL命令,但似乎我们使用的SQL Server的OLEDB驱动程序不支持此功能.
有没有办法通过ADO获取视图配置的这些信息,或者以"ColumnX映射到表Z中的ColumnY"的方式或以用于创建视图的实际SQL命令的形式?
我想std::shared_ptr在我的代码中使用.我已经看到有关于这个问题的其他问题,但我仍然遇到编译器错误.我有正确版本的gcc和设置吗?
我做了什么:
我曾试图单独编译我既头码- <memory>和<tr1/memory>,但仍然在这两种情况下得到下面的错误.
我正在使用的gcc版本是
gcc --version
gcc (GCC) 4.3.2
Run Code Online (Sandbox Code Playgroud)
当我包含<memory>标题我使用std::shared_ptr和我使用的<tr1/memory>标题std::tr1::shared_ptr?它是否正确?
我已经设置了shared_ptr,如下所示:
std::shared_ptr<A*> ptr_A = shared_ptr( new A() );
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
src/WH.cxx:156: error: 'shared_ptr' is not a member of 'std'
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
当我尝试<tr1/memory>标题时
src/WH.cxx:156: error: 'std::tr1' has not been declared
src/WH.cxx:162: error: 'shared_ptr' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
看起来我没有正确包含一些东西.有任何想法吗?
我知道boost库有,shared_ptr但这些库目前不适合我.
编辑:只是添加,我的编译器选项如下:g ++ -O3 -g3 -m32 -fPIC …
在工作中,我们有一个庞大的Perforce存储库(大约40k更改列表,总存储大小~145GB).我们对Perforce只有一些温和的抱怨感到满意,但我们计划采用更加分散的开发模式,因此,我们也希望转向更加分散的版本控制系统.
到目前为止,我已经看过通常的嫌疑人(git,mercurial和潜在的集市,因为我对它有很好的经验),但我们目前的主要障碍是从Perforce获取版本历史并导入各种DVCS,所以我们不要失去了历史.如果我们不一定要保留它,我们也不希望Perforce服务器徘徊 - 我这种迁移的经验是,一段时间后没有人看过旧的回购,所以你会失去历史那样.
由于有多个项目资源库中的想法是,当我们出口的历史,不是每个人都需要能够看到历史的每一个零件,将它拆分成多个DVCS项目.然而,我们最大的项目仍然包含大约2/3的承诺修订版,并且还占用了大约2/3的存储空间.它拥有最多的分支机构 - 大约30个.
到目前为止,我已经尝试了以下内容 - 一切都在Windows上,因为我们只是一个Windows专卖店:
hg convert扩展名导入Mercurial .这似乎对我正在转换的项目的主要分支非常有效,但是尝试使用分支图将Perforce分支转换为命名的Mercurial分支仍然会在默认分支上的每个签入时生成平面导入.也许那是因为我设置了分支映射错误,但hg help convert建议你只能将Perforce repo变成一个"扁平"结构而没有使用这个导入器的分支,这对我们的使用来说还不够好.所以,我的问题是:
我很熟悉使用dlopen()先前调用来检查共享库是否已加载到进程中dlopen()而不会触发加载(如果不存在),如下所示:
void* lib = dlopen(lib_name, RTLD_NOLOAD);
if (lib != NULL) {
...
}
Run Code Online (Sandbox Code Playgroud)
我最近尝试应用相同的模式来确定是否已使用LD_PRELOAD将少数共享库中的一个加载到进程空间中.然而在所有的情况下,上述呼吁dlopen()的回报NULL.
所以基本上,如果我使用这个命令行启动进程
LD_PRELOAD=libawesome.so ./mycoolprocess
Run Code Online (Sandbox Code Playgroud)
然后在mycoolprocess.c中的代码中运行以下检查
void* has_awesome = dlopen("libawesome.so", RTLD_NOLOAD);
if (has_awesome != NULL) {
printf("libawesome is available\n");
}
Run Code Online (Sandbox Code Playgroud)
无论是否使用LD_PRELOAD加载了共享库,对dlopen()always 的调用都会返回NULL.根据Andrew Henle在下面的评论,我也尝试dlopen使用其中一个重新加载的共享对象的绝对路径进行调用,但dlopen在这种情况下,尽管共享对象已预加载,仍会返回NULL.
所以我的问题是双重的:
在.cpp文件中,是否有任何差异/偏好?
// file scope outside any namespace
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;
Run Code Online (Sandbox Code Playgroud)
V/S
namespace { // anonymous
using X::SomeClass;
typedef SomeClass::Buffer MyBuf;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚在Lion上使用libcrypto,看起来整个api已经被弃用了.该手册页尚未自10.6.6更新.
有谁知道在Lion上替换libcrypto是什么?
我继承了一段代码,它们大量使用String - > byte []转换,反之亦然,对于一些自行开发的序列化代码.本质上,Java对象知道如何将它们的组成部分转换为字符串,然后转换为字节[].然后,所述字节数组通过JNI传递给C++代码,该代码将byte []重构为C++ std :: strings,并使用它们来引导镜像Java对象的C++对象.还有一点,但这是对这段代码如何工作的高级视图; 通信在这两个方向上都是这样的,这样C++ - > Java转换就是我上面提到的Java - > C++转换的镜像.
这段代码的一部分 - 将字符串实际转换为字节[] - 在分析器中意外地显示为刻录了大量CPU.当然,有很多数据正在转移,但这是一个意想不到的瓶颈.
代码的基本概要如下:
public void convertToByteArray(String convert_me, ByteArrayOutputStream stream)
{
stream.write(convert_me.getBytes());
}
Run Code Online (Sandbox Code Playgroud)
功能还有一点但不多.对于每个String/Stringified对象调用上述函数一次,并且在将所有成分写入ByteArrayOutputStream之后,ByteArrayOutputStream将转换为byte [].通过提取convert_me.getBytes()调用将上述内容分解为更适合剖析器的版本,可以看出此函数中90%以上的时间都花在了getBytes()调用上.
有没有办法改善getBytes()调用的性能,还是有另一种可能更快的方法来实现相同的转换?
正在转换的对象数量非常大.在仅使用生产数据的一小部分的分析运行中,我看到了1000万以上的调用上述转换函数.
由于我们非常接近将项目投入生产,因此目前还有一些不可行的解决方法:
我正在研究的C++项目(我从VS2008转换为VS2010)过去常常使用几个vcbuild .rules文件来指定自定义构建规则.这些.rules文件具有CustomBuildRule节点的特定"AdditionalDependencies"属性,该属性指定了在计算目标是否需要重建时应该考虑的文件列表.在VS2010转换期间,这些"AdditionalDependencies"被忠实地转移到相应的.props文件中.
与自定义生成规则关联的.targets文件会将这些添加AdditionalDependencies到节点的Inputs属性中Target.这可确保在依赖项中列出的任何文件不存在的情况下执行目标,但如果其中一个依赖项比目标的输出更新,则不会执行目标.它在逻辑上也不太正确,因为并非所有文件都是实际输入,其中一些是指在目标构建期间可能使用的可执行文件.因此,它们可能会被检入版本控制并且将存在,但是文件的较新版本需要触发受影响目标的重建.
目标节点的MSDN文档显示了一个Condition属性,该属性应该可以满足我的要求,但此属性支持的条件不会超出已经执行的"存在"测试.
是否存在可以使用的条件,它将比较两个文件的时间戳(或理想情况下,当前列出的文件AdditionalDependencies与Target的输出文件的时间戳),从而允许我触发类似make的"重建此目标,如果它是过时的这些依赖"?
我刚刚学习了Visual Studio 2010和MSBuild在它们将成功执行哪些vcxproj MSBuild文件时非常宽松的方法 - 它们将忽略子任务和单个文件的缺失配置,并且仍然成功执行构建任务.然而,这给我带来了问题,因为它导致跨多个配置的不一致构建,加上由于项目文件中的内部不一致,我不一定在Visual Studio的属性视图中编辑它们.
到目前为止,我已经设法通过手动编辑vcxproj文件来摆脱最有问题的不一致性,但鉴于此特定解决方案包含超过80个项目文件,这不是一个真正可接受的策略.
是否有一个工具可以检查MSBuild文件的内部一致性并突出显示缺少的配置,"你的项目文件说它提供配置X,Y和Z但文件X的自定义构建任务只支持配置X和Z"?
更新:我试图解决具体的问题,现在,而不是掉毛的vcxproj文件的更普遍的问题是,对于某些配置缺失条件句.不幸的是,添加和更新条件似乎需要比使用查找和替换工具安全完成的更多.以编程方式正确地执行它很可能需要DOM操作,并且鉴于我对构建文件的内部结构非常熟悉,到目前为止,使用能够进行基本结构XML验证的文本编辑器似乎是最快的方法.手头的任务.
然而,我真正希望看到的是一种工具,它至少可以自动突出显示这些问题,以减少跟踪它们所花费的时间.
我可以在类声明中使用部分模板特化
template<class T1, class T2>
struct A
{
void foo() { cout << "general"; }
};
template<class T1>
struct A<T1, int>
{
void foo() { cout << "partial specialization"; }
};
Run Code Online (Sandbox Code Playgroud)
但是当我试图在类声明之外做这件事时
template<class T1, class T2>
struct A
{
void foo();
};
template<class T1, class T2>
void A<T1, T2>::foo() { cout << "general"; }
template<class T1>
void A<T1, int>::foo() { cout << "partial specialization"; }
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
不完整类型 «struct A < T1, int >» 的无效使用
当您想重新定义所有成员时,使用第一种方法不是问题,但是如果您只想重新定义一个方法而不为所有其他方法重复代码怎么办?
那么,是否可以在类定义之外使用部分模板特化?
从 C 中的 assert.h 文件:
#define assert(expr) (__ASSERT_VOID_CAST (0))
Run Code Online (Sandbox Code Playgroud)
我想知道什么是 (__ASSERT_VOID_CAST (0))?我试图找到它的实现,但找不到任何地方。
让我有这个循环:
static a;
for (static int i=0; i<10; i++)
{
a++;
///// point A
}
Run Code Online (Sandbox Code Playgroud)
到这个循环2个线程进入......
我不确定什么......如果thread1进入POINT A会发生什么,保持在那里,而THREAD2进入循环10次,但是在将第10个循环增加到10之后,在检查之前我是值,如果它小于10,则Thread1退出循环并假设增加i并再次进入循环.Thread1将增加的价值是什么(我将会看到)?它会是10还是0?
是否可以认为Thread1会将i增加到1,然后线程2将再次循环9次(并且它们可能是8,7等等......)
谢谢
c++ ×5
c ×2
msbuild ×2
ado ×1
directive ×1
g++ ×1
git ×1
java ×1
ld-preload ×1
linux ×1
macos ×1
macros ×1
mercurial ×1
msbuild-4.0 ×1
namespaces ×1
osx-lion ×1
perforce ×1
performance ×1
shared-ptr ×1
sql-server ×1
svn ×1
templates ×1
typedef ×1
using ×1
view ×1