在下面的例子中我应该期望values.size()
每次循环都会调用它吗?在这种情况下,引入临时vectorSize
变量可能是有意义的.或者现代编译器是否能够通过识别向量大小无法改变来优化调用.
double sumVector(const std::vector<double>& values) {
double sum = 0.0;
for (size_t ii = 0; ii < values.size(); ++ii) {
sum += values.at(ii);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我不关心是否有更有效的方法来对向量的内容求和,这个问题只是在for构造中使用size().
好吧,我怀疑即使把这个用在文字中,我也会遇到困难,因为我对COM和公寓的理解并不是真的可以胜任工作;-)
我有一个COM进程内服务器/组件(C++),它包含一些遗留代码.由于此遗留代码的限制,我需要确保COM组件的方法是:
我通过使用ThreadingModel =""注册服务器来实现的前两个.
第三个是我甚至遇到的一个问题.
服务器正由多线程客户端使用,我无法控制.它在不同的线程上创建服务器/组件的多个实例并调用它们的DoSomething()方法.
这导致选择挂起和崩溃行为,我看到堆栈跟踪在主STA线程上包含对DoSomething()的两次调用,但是对于服务器的不同实例.
我最初甚至不认为这是可能的,但我现在有一个部分理解,我需要知道是否/如何防止它.
我的阅读建议我可能需要以某种方式使用IMessageFilter,但我不确定这是否可以在服务器端完成,或者需要由客户端完成.
有人可以帮忙吗?
请注意我希望看到COM级别是否有任何答案,而不是寻找有关更改服务器代码与遗留代码交互方式的建议(例如,通过在自己的线程中运行遗留代码并实现我自己的代码) (非COM)将来自服务器的所有实例的调用编组到该线程上).
如果我因为问“非编程”问题而被拒绝,我不会太惊讶,但也许有人知道......
我正在使用 WinXP 的内置“发送到压缩(zipped)文件夹”功能压缩我的 subversion 沙箱的内容,并惊讶地发现创建的 .zip 文件不包含 .svn 目录及其内容。
我一直假设所有文件都包含在内,我无法找到哪个属性/选项/属性控制包含或其他。有人可以帮忙吗?
谢谢,汤姆
编辑:
那么,难道没有一个聪明的方法来处理这个问题吗?真正的问题(显示隐藏文件设置为 true。.svn 文件夹没有被压缩,因为 windows 不认为它们是有效的文件夹)仍然没有答案。
谢谢...
我有一个传统的C++,我已经由仅需要一个客户端应用程序包装成用于一个进程COM对象"溶液引擎" 单个 "溶液引擎".
但是我现在有一个需要多个"解决方案引擎"的客户端应用程序.遗憾的是,底层遗留代码具有足够的全局数据,单例和线程恐怖,在给定可用资源的情况下,不可能同时在其中处理多个实例.
我希望是某种善良的灵魂可以告诉我一些COM魔术在哪里通过几个注册表设置的翻转,可以为每个实例提供一个单独的进程外COM服务器(单独的操作系统进程)请求的COM对象.
我好运吗?
从进程外COM对象(LocalServer32),我可以确定请求创建对象的客户端进程吗? - 具体来说,我需要掌握客户端进程命令行.
这个问题的原因在于(由于标准化,实现和支持不佳),对象的潜在第三方客户端具有对象需要解决的各种特性.
为此,对象需要能够识别其当前客户端.
遗憾的是,扩展COM对象的接口以便客户端可以识别自身......或者更准确地说,接口可以扩展,但是我无法让客户端调用扩展.
给定处理“A”的句柄(或 ProcessID),在 Win32 上,不相关的进程“B”是否可以确定进程“A”的当前工作目录?
为了能够将AES加密文本作为std::istream
解析器组件提供给我,我试图创建一个std::streambuf
包含vanilla crypto ++加密/解密的实现.
该main()
函数调用以下函数来比较我的包装器和vanilla实现:
EncryptFile()
- 使用我的streambuf实现加密文件DecryptFile()
- 使用我的streambuf实现解密文件EncryptFileVanilla()
- 使用vanilla crypto ++加密文件DecryptFileVanilla()
- 使用vanilla crypto ++解密文件问题是虽然加密文件由EncryptFile()
和创建的EncryptFileVanilla()
相同.创建的解密文件DecryptFile()
不正确,比由创建的文件短16个字节DecryptFileVanilla()
.可能并非巧合的是,块大小也是16.
我认为问题必须在CryptStreamBuffer::GetNextChar()
,但我一直在盯着它和加密++文档几个小时.
有人可以帮忙/解释一下吗?
任何其他关于我的std::streambuf
实施如何蹩脚或天真的评论也欢迎;-)
谢谢,
汤姆
// Runtime Includes
#include <iostream>
// Crypto++ Includes
#include "aes.h"
#include "modes.h" // xxx_Mode< >
#include "filters.h" // StringSource and
// StreamTransformation
#include "files.h"
using namespace std;
class CryptStreamBuffer: public std::streambuf {
public:
CryptStreamBuffer(istream& encryptedInput, CryptoPP::StreamTransformation& …
Run Code Online (Sandbox Code Playgroud) 有人可以向我解释为什么以下工作:
template<class T> class MyTemplateClass {
public:
T * ptr;
};
int main(int argc, char** argv) {
MyTemplateClass<double[5]> a;
a.ptr = new double[10][5];
a.ptr[2][3] = 7;
printf("%g\n", a.ptr[2][3]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
class MyClass {
public:
double[5] * ptr;
// double(*ptr)[5]; // This would work
};
int main(int argc, char** argv) {
MyClass a;
a.ptr = new double[10][5];
a.ptr[2][3] = 7;
printf("%g\n", a.ptr[2][3]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,模板实例化不仅仅是模板参数的文本替换 - 这个魔术有一个简单的解释吗?
对于后者,编译器(g ++ 4.1.2)会吐出以下错误:
test.cxx:13: error: expected unqualified-id before '[' token
Run Code Online (Sandbox Code Playgroud)
第13行是该 …