- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个字节数组,其中包含事件 ID 和一些 ID 的事件数据:{0x1, 0x2, 0x32}//例如,0x1 - eventId,0x2 - 它的数据,0x32 - 另一个事件 ID。
为了解析它并创建 Event 对象,我创建了几个二进制函数,它们知道如何解释事件数据字节和一个以事件 ID 作为键并以指向 std::binary_function 的指针作为值的映射:
map<uint8_t, SspProtocol::EventDataParser*>
SspProtocol::EventDataParser 在哪里:
typedef unsigned char uint8_t; // declared in file stdint.h
[...]
class SspProtocol {
typedef std::binary_function<const std::vector<uint8_t>*, std::vector<uint8_t>::const_iterator*, Event> EventDataParser;
[...]
}
当我尝试调用这个仿函数时出现编译器错误:
vector<SspProtocol::Event> SspProtocol::poll() {
vector<uint8_t> data = sendCommand(POLL);
vector<Event> events;
const vector<uint8_t>& const_data = data; // (*)
for (vector<uint8_t>::const_iterator i = const_data.begin(); i != const_data.end();) {
map<uint8_t, SspProtocol::EventDataParser*>& parsers = Event::eventParser();
EventDataParser& parser = *parsers[*i]; // (**)
Event event = parser(&const_data, &i); // (***)
events.push_back(event);
}
return events;
}
我在行 (*) 上遇到错误:
error: no match for call to
‘(protocols::ssp::SspProtocol::EventDataParser
{aka std::binary_function<const std::vector<unsigned char>*,
__gnu_cxx::__normal_iterator<const unsigned char*,
std::vector<unsigned char> >*, protocols::ssp::SspProtocol::Event>
}) (const std::vector<unsigned char>*,
std::vector<unsigned char>::const_iterator*)’
为什么我的 g++ 编译器使用 __gnu_cxx::__normal_iterator* 而它为什么与 const_iterator* 不兼容?我该怎么办?
P.S.:我特别在行 () 上添加了 const 引用,以使第一个模板参数具有 const-qualifier 并且我还划分了仿函数调用并从映射中获取仿函数(参见行 ( *)).这告诉我错误出在仿函数调用上,它没有连接到 map 和 auto_ptr。
P.P.S.:这是一个示例事件解析器:
class SspProtocol::EventWithoutDataParser
: public SspProtocol::EventDataParser {
bool ackEvent_;
public:
EventWithoutDataParser(bool ackEvent = false) : ackEvent_(ackEvent) {}
Event operator()(const vector<uint8_t>* data, vector<uint8_t>::const_iterator* i) {
Event event(*(*i));
++(*i);
return event;
}
bool ackEvent() const { return ackEvent_; }
};
最佳答案
查找 std::binary_function ( http://en.cppreference.com/w/cpp/utility/functional/binary_function ) 的文档。它是二进制函数的基类,除了记录参数类型和返回类型外什么都不做。它没有定义实际的 operator() (a,b) 所以显然它不能在这个类型的实例/指针上调用。相反,请尝试使用
std::function<Event(const std::vector<uint8_t>*, std::vector<uint8_t>::const_iterator*)>
按值(不是按指针,它已经是一种高级函数指针)来存储您的解析器函数。可以检查 std::function 是否为空并调用。
关于c++ - binary_function,调用时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22343994/
我在静态库 .a 中定义了一个 std::map,就像这样 ////////////////////////////////////// #import class CCImage; class I
template struct gSorting : public std::binary_function { bool operator() (int number, int n2)
我有一个字节数组,其中包含事件 ID 和一些 ID 的事件数据:{0x1, 0x2, 0x32}//例如,0x1 - eventId,0x2 - 它的数据,0x32 - 另一个事件 ID。 为了解析它
我正在使用 Visual Studio 2010 Beta 2(也尝试过使用 NetBeans),但我在以下代码中遇到了段错误: // One of the @link s20_3_3_compari
包括 #include using namespace std; int main() { binary_function operations[] = { plus(), minus(
std::binary_function现已弃用,将在 c++17 中删除.我搜索了不同的出版物,但我找不到替换它的确切方法。我想知道我应该如何在c++11中编写以下代码风格。 template i
我们目前正在使用一些 3rd 方包,这些包在内部使用了一些 std::binary_function、std::unary_function。您可能知道,这些函数在 C++14 中已被弃用,现在它们都
以下代码: $ cat test02.cpp #include #include #include #include #include struct myadd : public s
我阅读了有关二元和一元函数的教程。我了解它们的结构,但我无法想象在哪种情况下我需要这些功能。你能举个例子来说明它们的用法吗? http://www.cplusplus.com/reference/st
我注意到 std::binary_function is only a struct with typedefs .在链接中,它特别指出: binary_function does not defin
我有这个枚举(类) enum class conditional_operator { plus_op, or_op, not_op } 我想要一个代表这些映射的 std::m
我发现 binary_function 已从 C++11 中删除。我想知道为什么。 C++98: template struct less : binary_function { bool o
我注意到在c++17中binary_function被删除了。而且我不知道如何解决它。有人可以帮我改变结构吗?谢谢 我尝试通过谷歌搜索但找不到解决方案。Visual Studio 2019,C++17
我的 std::map 有一对“唯一键”和“唯一值”。我通常会为一个值找到一个键,并为一个键找到一个值。我已经知道使用 std::find_if + lambda 的方法,但是我想知道是否有更好的方法
1st 是的,我一直在使用 Visual Studio 2008,我相信这个错误是 Visual Studio 2008 特有的。 我正在尝试编写一个仿函数来比较我的结构中的 1 个成员,这样我就可以
我正在尝试编写一个函数来打印 minheap 和 maxheap 的内容,但我在使用比较器时遇到了问题。我尝试使用三元运算符,但它不起作用,因为 std::less 和 std::greater 是不
从 std::binary_function(或 std::unary_function)继承有什么好处? 例如我有这样的代码: class Person { public: Person(
我想尽可能避免代码重复。假设我有一个类,例如, class T { int val; bool operator < (const T& right) const { return v
我是一名优秀的程序员,十分优秀!