通常,人们需要一起使用几种枚举类型.有时,一个人有一个名字冲突.我想到了两种解决方案:使用命名空间,或使用"更大"的枚举元素名称.仍然,命名空间解决方案有两种可能的实现:具有嵌套枚举的虚拟类或完整的命名空间.
我正在寻找这三种方法的优缺点.
例:
// oft seen hand-crafted name clash solution
enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
void setPenColor( const eColors c ) {
switch (c) {
default: assert(false);
break; case cRed: //...
break; case cColorBlue: //...
//...
}
}
// (ab)using a class as a namespace
class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
class Feelings { enum e { cAngry, cBlue, cHappy, cEnd …Run Code Online (Sandbox Code Playgroud) 我正在从表单添加一个项目数组,如果所有项目都是空的,我想执行一些验证并添加到错误字符串.所以我有:
$array = array(
'RequestID' => $_POST["RequestID"],
'ClientName' => $_POST["ClientName"],
'Username' => $_POST["Username"],
'RequestAssignee' => $_POST["RequestAssignee"],
'Status' => $_POST["Status"],
'Priority' => $_POST["Priority"]
);
Run Code Online (Sandbox Code Playgroud)
然后,如果所有数组元素都为空,则执行:
$error_str .= '<li>Please enter a value into at least one of the fields regarding the request you are searching for.</li>';
Run Code Online (Sandbox Code Playgroud) 一些框架(Qt,Windows,Gtk ...)提供了向二进制文件添加资源的功能.我想知道是否有可能在没有框架的情况下实现这一点,因为所有真正需要的是
如何使用gcc工具链实现这一目标?
查看XML标头
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
Run Code Online (Sandbox Code Playgroud)
我是否正确地声明encoding属性是
或者该属性不是关于流的内容?
我在这里混淆了什么吗?
在使用server.dll和client.exe的项目中,我dllexport从服务器dll编辑了一个服务器符号,而不是将其 dllimport编辑到客户端exe中.
仍然,应用程序链接,并启动,没有任何问题.是dllimport不需要的,那么???
细节:
我有这个'服务器'DLL:
// server.h
#ifdef SERVER_EXPORTS
#define SERVER_API __declspec(dllexport)
#else
#define SERVER_API // =====> not using dllimport!
#endif
class SERVER_API CServer {
static long s;
public:
CServer();
};
// server.cpp
CServer::CServer(){}
long CServer::s;
Run Code Online (Sandbox Code Playgroud)
这个客户端可执行文件
#include <server.h>
int main() {
CServer s;
}
Run Code Online (Sandbox Code Playgroud)
服务器命令行:
cl.exe /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_USRDLL"
/D "SERVER_EXPORTS" /D "_UNICODE" /D "UNICODE" /D "_WINDLL"
/Gm /EHsc /RTC1 /MDd /Yu"stdafx.h"
/Fp"Debug\server.pch" /Fo"Debug\\" /Fd"Debug\vc80.pdb"
/W3 /nologo …Run Code Online (Sandbox Code Playgroud) 为了将"todo"项添加到我的代码中,我想在编译器输出中添加一条消息.
我希望它看起来像这样:
c:/temp/main.cpp(104): TODO - add code to implement this
Run Code Online (Sandbox Code Playgroud)
为了利用Visual Studio构建输出功能,通过双击导航到相应的行.
但__LINE__宏似乎扩展到了一个int不允许写作的
#pragma message( __FILE__ "("__LINE__"): ..." )
Run Code Online (Sandbox Code Playgroud)
会有另一种方式吗?
使用VisualStudio生成COM dll时,我真正需要的是DllCanUnloadNow从dll本身导出的符号(以及三个相关的符号). 没有人会链接到我的库,所以我(根本没有)对.lib文件或.exp文件感兴趣.
但是,我没有设法禁止创建这些文件.(注意:我确实知道在构建后的步骤中如何删除它们)
这些是我的链接器参数:
/OUT:"u:/cada-nt/bin/PData.dll"
/INCREMENTAL:NO
/NOLOGO
/DLL
/MANIFEST:NO
/DEF:"PData.def"
/DEBUG
/PDB:"u:/cada-nt/pdb/PData.pdb"
/ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
odbc32.lib odbccp32.lib
Run Code Online (Sandbox Code Playgroud)
问题:
MSVC的"安全" sprintf功能具有"知道"目标缓冲区大小的模板版本.但是,这段代码在结束后很快就在堆栈中绘制了567890 bytes...
char bytes[5];
_snprintf_s( bytes, _TRUNCATE, "%s", "1234567890" );
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么,或者这是一个已知的错误?
(我在VS2005工作 - 没有在2008年或2010年测试)
我想对我遇到的技术提出一些建议.通过查看代码片段可以很容易地理解它,但我在以下段落中对其进行了更多的记录.
使用"Code Sandwich"习惯用法是处理资源管理的常用方法.用于C++的RAII习语,我切换到Java并发现我的异常安全的资源管理导致了深层嵌套的代码,我很难掌握常规控制流.
显然(java数据访问:这是java数据访问代码的好风格,还是最终尝试太多了?,Java io丑陋的try-finally阻塞等等)我并不孤单.
我尝试了不同的解决方案来应对这个问题:
明确地维护程序状态:resource1aquired,fileopened...,并有条件地清理:if (resource1acquired) resource1.cleanup()...但我避免在显式变量中复制程序状态 - 运行时知道状态,我不想关心它.
包装在每个功能块嵌套-结果更难遵循控制流程,并为真正尴尬的函数名称:runResource1Acquired( r1 ),runFileOpened( r1, file ),...
最后,我在一些关于代码三明治的研究论文的支持下(概念上)得到了一个成语:
而不是这个:
// (pseudocode)
try {
connection = DBusConnection.SessionBus(); // may throw, needs cleanup
try {
exported = false;
connection.export("/MyObject", myObject ); // may throw, needs cleanup
exported = true;
//... more try{}finally{} nested blocks
} finally {
if( exported ) connection.unExport( "/MyObject" );
} …Run Code Online (Sandbox Code Playgroud) 在审阅时,我有时会遇到这种循环:
i = begin
while ( i != end ) {
// ... do stuff
if ( i == end-1 (the one-but-last element) ) {
... do other stuff
}
increment i
}
Run Code Online (Sandbox Code Playgroud)
然后我问这个问题:你会写这个吗?
i = begin
mid = ( end - begin ) / 2 // (the middle element)
while ( i != end ) {
// ... do stuff
if ( i > mid ) {
... do other stuff
}
increment i
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这超过了编写循环的意图:你循环,因为每个元素都有一些共同点.使用此构造,对于某些元素,您可以执行不同的操作.因此,我总结说,您需要为这些元素单独的循环:
i = begin …Run Code Online (Sandbox Code Playgroud) language-agnostic loops for-loop control-structure while-loop
c++ ×6
arrays ×1
c ×1
declspec ×1
dllimport ×1
enums ×1
for-loop ×1
gcc ×1
header ×1
java ×1
line-numbers ×1
linker ×1
loops ×1
nested ×1
php ×1
pragma ×1
scope ×1
try-finally ×1
validation ×1
visual-c++ ×1
while-loop ×1
xml ×1