在PHP和C#中,常量可以在声明时初始化:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
Run Code Online (Sandbox Code Playgroud)
我有一个仿函数的以下C++声明,它与另一个类一起使用来比较两个数学向量:
struct equal_vec
{
bool operator() (const Vector3D& a, const Vector3D& b) const
{
Vector3D dist = b - a;
return ( dist.length2() <= tolerance );
}
static const float tolerance = 0.001;
};
Run Code Online (Sandbox Code Playgroud)
这个代码编译没有问题与g ++.现在在C++ 0x模式(-std = c ++ 0x)中,g ++编译器输出一条错误消息:
错误:'constexpr'需要对非整数类型的静态数据成员'容差'进行类内初始化
我知道我可以static const在类定义之外定义和初始化该成员.此外,可以在构造函数的初始化列表中初始化非静态常量数据成员.
但有没有办法在类声明中初始化一个常量,就像在PHP或C#中可能的那样?
我使用static关键字只是因为可以在g ++中的类声明中初始化这些常量.我只需要一种方法来初始化类声明中的常量,无论它是否声明static.
我正在寻找最优雅的方法将字符串向量内部转换为字符串.以下是我现在使用的解决方案:
static std::string& implode(const std::vector<std::string>& elems, char delim, std::string& s)
{
for (std::vector<std::string>::const_iterator ii = elems.begin(); ii != elems.end(); ++ii)
{
s += (*ii);
if ( ii + 1 != elems.end() ) {
s += delim;
}
}
return s;
}
static std::string implode(const std::vector<std::string>& elems, char delim)
{
std::string s;
return implode(elems, delim, s);
}
Run Code Online (Sandbox Code Playgroud)
那里还有其他人吗?
在C++中使用COM时,字符串通常是BSTR数据类型.有人可以使用BSTR包装器CComBSTR或MS CString.但是因为我不能在MinGW编译器中使用ATL或MFC,是否有标准代码片段转换BSTR为std::string(或std::wstring),反之亦然?
是否还有一些BSTR类似的非MS包装CComBSTR?
感谢所有以任何方式帮助过我的人!仅仅因为没有人解决过BSTR和之间的转换问题std::string,我想在此提供一些关于如何做到这一点的线索.
下面是我用转换的功能BSTR,以std::string及std::string对BSTR分别为:
std::string ConvertBSTRToMBS(BSTR bstr)
{
int wslen = ::SysStringLen(bstr);
return ConvertWCSToMBS((wchar_t*)bstr, wslen);
}
std::string ConvertWCSToMBS(const wchar_t* pstr, long wslen)
{
int len = ::WideCharToMultiByte(CP_ACP, 0, pstr, wslen, NULL, 0, NULL, NULL);
std::string dblstr(len, '\0');
len = ::WideCharToMultiByte(CP_ACP, 0 /* no flags */,
pstr, wslen /* not …Run Code Online (Sandbox Code Playgroud) 我正在实现一种将一组数据传输到可编程加密狗的方法.加密狗基于智能卡技术,可以在内部执行任意代码.输入和输出数据作为二进制块传递,可通过输入和输出指针访问.
我想使用关联数组来简化数据处理代码.一切都应该这样:
首先是主机应用程序:
// Host application in C++
in_data["method"] = "calc_r";
in_data["id"] = 12;
in_data["loc_a"] = 56.19;
in_data["loc_l"] = 44.02;
processor->send(in_data);
Run Code Online (Sandbox Code Playgroud)
接下来加密狗内的代码:
// Some dongle function in C
char* method_name = assoc_get_string(in_data, "method");
int id = assoc_get_int(in_data, "id");
float loc_a = assoc_get_float(in_data, "loc_a");
float loc_l = assoc_get_float(in_data, "loc_l");
Run Code Online (Sandbox Code Playgroud)
所以我的问题是关于加密狗部分的功能.是否有C代码或库来实现如上所述的关联数组行为?
我正在开发一个C++加密狗通信库.该库将提供一个统一的接口,以与一系列远程代码执行加密狗(如SenseLock,KEYLOK,Guardant Code)进行通信.
加密狗基于智能卡技术,具有内部文件系统和RAM.
典型的操作例程包括(1)枚举连接到USB端口的加密狗,(2)连接到所选择的加密狗,(3)执行命名模块传递输入和收集输出数据.
嗯,所有这些阶段最终都会出错,这是微不足道的.可能有很多情况,但最常见的是:
? - 我不知道案件是否被认为是致命的.
我仍在决定是否抛出异常,返回错误代码,或为两种情况实现方法.
问题是:
从不同的角度看更多意见会很有意思,所以我决定在这个问题上增加100点声望.
将数组声明为类成员时,应该采用哪种方式?
class Test1 {
private $paths = array();
public function __construct() {
// some code here
}
}
Run Code Online (Sandbox Code Playgroud)
要么
class Test2 {
private $paths;
public function __construct() {
$this->paths = array();
// some code here
}
}
Run Code Online (Sandbox Code Playgroud)
在良好实践和绩效方面哪一个更好?你会推荐什么?
我得到logcat输出如下:
02-12 20:06:18.515 11470-11470/? D/dalvikvm? GC_EXTERNAL_ALLOC freed 3K, 48% free 3188K/6023K, external 7949K/8580K, paused 29ms
02-12 20:06:18.804 11470-11470/? D/dalvikvm? GC_EXTERNAL_ALLOC freed <1K, 48% free 3189K/6023K, external 13255K/13400K, paused 28ms
02-12 20:06:19.406 11470-11470/? D/dalvikvm? GC_EXTERNAL_ALLOC freed <1K, 48% free 3189K/6023K, external 14706K/16754K, paused 56ms
02-12 20:06:19.914 11470-11475/? I/dalvikvm? Total arena pages for JIT: 11
Run Code Online (Sandbox Code Playgroud)
"JIT的总体竞技场页面"真正意味着什么?
在为基于智能卡的加密狗开发软件保护库的过程中,我意识到我需要在加密狗内部的客户端应用程序和代码之间来回传输一些树状数据结构.
那么,在使用Web服务时,XML-RPC或JSON-RPC等技术是合理的考虑方式.但是,智能卡等嵌入式设备并非如此.您需要使用一些二进制格式来优化内存使用并获得良好的性能.
我想我需要的是实现一些二进制数据编组算法.我不喜欢重新发明整个轮子的想法,我非常确定有很多关于编组这类问题的书籍,文章和例子.
你会推荐什么?
UPD. 我在Linux上使用C和C++,但问题是关于编组算法的一般信息.
我正在研究基于Qt的CAD应用程序,我正在试图弄清楚应用程序的架构.该应用程序能够加载包含计划,部分等的多个项目,并在专用视图中显示这些图形.每个项目和全局配置.
应用程序由全局对象表示,派生自QApplication:
class CADApplication Q_DECL_FINAL: public QApplication {
Q_OBJECT
public:
explicit CADApplication(int &args, char **argv);
virtual ~CADApplication();
...
ProjectManager* projectManager() const;
ConfigManager* configManager() const;
UndoManager* undoManager() const;
protected:
const QScopedPointer<ProjectManager> m_projectManager;
const QScopedPointer<ConfigManager> m_configManager;
...
};
Run Code Online (Sandbox Code Playgroud)
"管理器"是在CADApplication构造函数中创建的.他们负责与加载的项目(ProjectManager),全局配置选项(ConfigManager)等相关的功能.
还有项目视图,配置选项对话框和可能需要访问"管理器"的其他对象.
为了获得当前项目,SettingsDialog需要:
#include "CADApplication.h"
#include "ProjectManager.h"
...
SettingsDialog::SettingsDialog(QWidget *parent)
: QDialog(parent)
{
...
Project* project = qApp->projectManager()->currentProject();
...
}
Run Code Online (Sandbox Code Playgroud)
我喜欢整个方法的是它遵循RAII范式."管理者"是在applcation的实例化/销毁时创建和销毁的.
我不喜欢的是它不容易出现循环引用,并且我需要在每个源文件中包含"CADApplication.h",其中需要任何"管理器"的实例.这就像CADApplication对象被用作这些"经理"的某种全球"持有者".
我做了一些研究.似乎还有其他一些方法暗示使用单身人士.OpenToonz使用TProjectManager单例:
class DVAPI TProjectManager {
...
public:
static …Run Code Online (Sandbox Code Playgroud)