如何最正确地使用libusb与连接的USB设备通信?
具体来说,如何将数据传输到USB设备,从设备接收信息,找出所连接设备的名称,是否有存储等.
更具体地说,我将在Mac OS X机器上运行它,所以我知道我不能只使用Windows头文件.
如果对libusb和USB设备有一个很好的解释,这也会有所帮助.
我正在使用unique_ptrs 等处理一些代码.这条线是:
std::unique_ptr<char[], void(*)(void*)> result(..., std::free);
Run Code Online (Sandbox Code Playgroud)
哪个有效.我意识到std :: free给出的类型是第二个模板参数.我试过用:
std::unique_ptr<char[], decltype(std::free)> result(..., std::free);
Run Code Online (Sandbox Code Playgroud)
这将更容易阅读,更容易出错.但是我得到了<memory>与"使用函数类型实例化数据成员" 相关的错误.
有没有办法做到这一点?
这是我的算法的一个版本:
public void copyStackToArray(Stack<Integer> stack) {
int i = 0;
while (!this.bestRouteStack.empty()) {
this.array[i++] = stack.pop();
}
}
Run Code Online (Sandbox Code Playgroud)
(对于我的代码,数组上的边界保证可以正常)
我想知道是否有一个库算法可以做到这一点,但搜索没有任何结果.
例如,循环:
std::vector<int> vec;
...
for (auto& c : vec) { ... }
Run Code Online (Sandbox Code Playgroud)
将迭代vec并通过引用复制每个元素.
有没有理由这样做?
for (int& c : vec) { ... }
Run Code Online (Sandbox Code Playgroud) 我有这个代码:
#include <iostream>
#include <vector>
using std::vector;
#ifdef __APPLE__
#include <GLUT/GLUT.h>
#else
#include <GL/GLUT.h>
#endif
#define heightWindow 500
#define widthWindow 500
struct point {
double x;
double y;
};
vector<struct point> arr(heightWindow);
void renderScene();
int main(int argc, char **argv)
{
int k = 0;
for (struct point& i : arr) {
i.x = k;
i.y = k;
k++;
}
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(widthWindow, heightWindow);
glutCreateWindow("2D NBody Problem");
glutDisplayFunc(renderScene);
glPointSize(3.0);
glutMainLoop();
return 1;
}
void …Run Code Online (Sandbox Code Playgroud) 从文件中读取时遇到问题.以下是一些示例代码:
std::for_each(vec.begin(), vec.end(), [&](std::string str1) {
//... split the string up by spaces into vector "split"
for (auto& str : split) {
std::cout << str << "\n";
std::cout << str[0] << "\n";
}
});
Run Code Online (Sandbox Code Playgroud)
所以基本上我在一行上打印出拆分的每个元素,然后打印第一个字符.我得到的是这个:
“test test test
?
Run Code Online (Sandbox Code Playgroud)
第一行是整行str,第二行应该是第一行.但是,它会打印一个?.即使使用a std::string也会得到相同的结果:
for (auto& str : split) {
std::cout << str << "\n";
std::cout << std::string(1, str[0]) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我正在使用clang++ -std=c++11我的设置.有没有人见过这个?
运行代码:
for (auto& v : vec)
v.erase(0, v.find("\n") + 1);
Run Code Online (Sandbox Code Playgroud)
做了什么:擦除所有内容直到第一个"\n"中的每个元素vec.
但是,运行代码:
std::for_each(vec.begin(), vec.end(), [&](std::string v) {
v.erase(0, v.find("\n") + 1);
});
Run Code Online (Sandbox Code Playgroud)
不删除任何元素vec.使lambda按值传递而不是-reference不会改变结果.