- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序,其中包含一组输入变量和一组输出变量,我使用 XML 与 Apache/PHP 网页进行交换。该网页是用户可以查看已配置/正在进行的内容并可以更改设置的地方。
当我将 XML 传递给 PHP 程序(我们使用 Unix_domain 套接字)时,我添加了很多关于传递给他的设置和指标的元信息。诸如数据类型、最小值、最大值、默认值、读/写权限等。
<temperature datatype="INT32" min=-"40" max="150" permissions="R/O">25</temperature>
在构建出站 xml 时,我需要了解每个变量的元数据。我认为执行此操作的一个好方法是创建一个类 VarInfo,我会将其关联到每个变量。为了将变量名称存储为映射中的键(不确定我是否总能知道变量名称),我想使键成为指向变量的指针,而值成为指向该变量的 VarInfo 对象的指针。我知道存储混合指针类型的唯一方法是将它们全部转换为 void*。所以,像这样:
bool cmpr( void* a, void*b) { return (long)a < (long)b;};
std::map<void*,VarInfo*,cmpr> VarMap;
int temperature;
VarInfo vi_temperature;
VarMap[(void*)&temperature] = &vi_temperature;
这样做会在声明 map 时产生一堆错误。
expected a type, got ‘cmpr’ ACT_iod.cpp
Invalid template arguments ACT_iod.cpp line 40 Semantic Error
invalid type in declaration before ‘;’ token
type/value mismatch at argument 3 in template parameter list for
‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
那么,有人可以建议我如何让它工作,并且可能还建议一种更好的方法来存储元信息吗?还在考虑换成 std::string's 作为 key。
谢谢。
最佳答案
std::map
的第三个参数应该是比较器的类型。作为一种修复,您可以制作 cmpr
一个仿函数(由于其 inlinablility 通常是首选方法):
struct cmpr {
bool operator()(void* a, void* b) {...}
}
std::map<void*,VarInfo*,cmpr> VarMap;
另一种选择是使用函数指针的类型(bool(*)(void*, void*)
iirc)并将指向实际使用的函数的指针作为构造函数的参数:
bool cmpr( void* a, void*b) { return (intptr_t)a < (intptr_t)b;}
std::map<void*,VarInfo*,bool(*)(void*, void*)> VarMap(&cmpr);
编辑:现在我想起来了:指针的默认比较是 <
无论如何,所以你可以使用 std::map<void*, VarInfo*>
这具有更便携的好处。通常你应该避免将指针指向 long
.尽可能避免指向整数转换的指针,否则使用 intptr_t
, uintptr_t
或 size_t
是一个更好的主意,因为 long
不能保证足够大以容纳指针(在某些 64 位平台上 long 确实是 32 位)。
关于c++ - 如何设置和使用 std::map<void*, MyClass*>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250873/
在学习 C++ 的过程中,我偶然发现了文章 Writing Copy Constructors and Assignment Operators它提出了一种机制来避免复制构造函数和赋值运算符之间的代码
显然,以这种方式实现基于类的实例方法是 JavaScript 中的一个习惯用法: function MyClass(){...} MyClass.prototype.methodA = functio
我尝试使用泛型为 NSManagedObject 的子类提供通用方法,但当 Swift 似乎无法找到/将泛型转换为具体类时,我收到错误: /// NSManagedObject+Helper.swif
有什么区别 MyClass mc = MyClass(); 和 MyClass mc; 在 C++ 中? 最佳答案 第一个调用复制构造函数,以临时对象作为参数 - MyClass() 创建临时对象。
考虑不涉及复制省略的情况(C++17 之前)。 来自 cppreference(再次假设 C++14): Temporary objects are created in the following
这里有一些代码: class MyClass { public: int y; }; int main() { MyClass item1; MyClass item2 = M
这种类型转换表达式之间有什么区别?什么是更好的? // One way var t:MyClass = MyClass(o); // Another var t:MyClass = o as MyCl
为了跟踪实例,我们有一个数组 MyClass[] mc = new MyClass[5]; 我想在构造函数调用本身期间保存在此数组中创建的 MyClass 实例。 类似这样的事情: public cl
我在对一个非常简单的类进行子类化时遇到问题,该类也有返回初始类的方法。 public class MyClass { public MyClass(){ } public MyC
我有一个 std::list在我的课上我有 myclass::operator bool PComp(const T * const & a, const T * const & b) { re
我正在编写一个简单的程序来计算面积,我得到的错误是: no matching function for call to 'myclass::myclass()' 我无法理解此错误的原因以及解决方法。
我希望我可以针对这个问题逐字发布我的项目,但我不能。 基本上,我有以下类(class): class Lowest { someValue: string constructo
为什么可以施放MyClass反对 List没有编译错误(只是有“未检查”警告),尽管 MyClass未实现 List 接口(interface),同时无法进行强制转换,例如 String类同样的方式。
我正在这里试验一下。 假设我有一个类: static class MyClass { static String property = "myProperty"; } 和一个方法: publi
我正在尝试为单元测试目的创建一个 stub 类。 Stub 指向完全相同的 EmployeeData 类定义,但编译器认为它们是不同的,不知何故。结果,我不断收到以下消息: Cannot implic
为什么我不能通过 Point src[1][4] = { { Point(border,border), Point(border,h-border),
我有一个正在创建的模板类,我需要一个方法来返回该类的对象并对其进行分配。我有一个方法接收 2 个对象、创建一个新对象并返回它,以及重载赋值运算符以正确复制成员。 我试过用两种方法来做到这一点(两种方法
在 C# 中是否可以在运行时创建一个类型,该类型继承自泛型类,其中基类的模板参数是正在构造的当前类?这将编译正常: // I have this class: public class OtherCl
我有几个带有“listingThumb”类的 div CSS: .listingThumb{ height:50px; width:50px; overflow:hidden; } HTML: 我希
例如,我有一个包含不同容器的类来保存由 new 运算符创建的 MyClass 对象: class A{ MyClass* m; vector vm; vector > vvm;
我是一名优秀的程序员,十分优秀!