小编Geo*_*ard的帖子

以编程方式获取Android设备的MAC

我需要使用Java获取我的Android设备的MAC地址.我在网上搜索过,但是我找不到任何有用的东西.

java android mac-address

80
推荐指数
7
解决办法
14万
查看次数

从Option <String>转换为Option <&str>

我经常Option<String>从计算中获得一个,我想使用这个值或默认的硬编码值.

这对于一个整数来说是微不足道的:

let opt: Option<i32> = Some(3);
let value = opt.unwrap_or(0); // 0 being the default
Run Code Online (Sandbox Code Playgroud)

但是使用a String和a &str,编译器会抱怨类型不匹配:

let opt: Option<String> = Some("some value".to_owned());
let value = opt.unwrap_or("default string");
Run Code Online (Sandbox Code Playgroud)

这里的确切错误是:

error[E0308]: mismatched types
 --> src/main.rs:4:31
  |
4 |     let value = opt.unwrap_or("default string");
  |                               ^^^^^^^^^^^^^^^^
  |                               |
  |                               expected struct `std::string::String`, found reference
  |                               help: try using a conversion method: `"default string".to_string()`
  |
  = note: expected type `std::string::String`
             found type `&'static str`
Run Code Online (Sandbox Code Playgroud)

一种选择是将字符串切片转换为拥有的String,如rustc所示:

let value …
Run Code Online (Sandbox Code Playgroud)

rust

56
推荐指数
4
解决办法
7801
查看次数

<>语法与常规生命周期绑定有何不同?

请考虑以下代码:

trait Trait<T> {}

fn foo<'a>(_b: Box<dyn Trait<&'a usize>>) {}
fn bar(_b: Box<dyn for<'a> Trait<&'a usize>>) {}
Run Code Online (Sandbox Code Playgroud)

这两个函数foobar似乎接受Box<Trait<&'a usize>>,虽然foo比更简明做它bar.他们之间有什么区别?

另外,在什么情况下我需要for<>像上面那样的语法?我知道Rust标准库在内部使用它(通常与闭包有关),但为什么我的代码需要它呢?

rust

56
推荐指数
1
解决办法
4267
查看次数

box关键字有什么作用?

在Rust中,我们可以使用Box<T>类型在堆上分配内容.此类型用于安全地抽象指向堆内存的指针. Box<T>由Rust标准库提供.

我很好奇如何Box<T>实现分配,所以我找到了它的源代码.这是Box<T>::new(从Rust 1.0开始)的代码:

impl<T> Box<T> {
    /// Allocates memory on the heap and then moves `x` into it.
    /// [...]
    #[stable(feature = "rust1", since = "1.0.0")]
    #[inline(always)]
    pub fn new(x: T) -> Box<T> {
        box x
    }
}
Run Code Online (Sandbox Code Playgroud)

实现中唯一的行返回值box x.box官方文档中的任何地方都没有解释此关键字; 事实上,它仅在std::boxed文档页面上简要提及.

rust

36
推荐指数
3
解决办法
7355
查看次数

我可以下载并安装gacutil.exe而无需安装VS或SDK吗?

我希望管理员为我注册一些DLL,但他可能不想安装整个SDK.

他可以安装gacutil.exe吗?如果是这样,他在哪里可以得到它?我只是将gacutil.exe文件通过电子邮件发送给他,他必须把它放在他的机器上才能使用它?

.net install gac gacutil download

22
推荐指数
3
解决办法
9万
查看次数

Qt 5构建错误:测试表达后的额外字符

我正在努力学习Qt 5.3,这是我的第一个程序(hello world).当我尝试构建时,它会显示以下错误:

测试表达后的额外字符.

我无法理解为什么会出现这个错误.我刚从互联网上拿了一些简单的代码来检查我是否正确安装了Qt.这是代码:

#include <QApplication>
#include <QPushButton>
int main(int argc, char **argv)
{
    QApplication app (argc, argv);
    QPushButton button ("Hello world !");
    button.show();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

错误显示在第3,5,6,8行.我对Qt完全不熟悉,所以请给出一个简单的解释.

c++ qt qt5

19
推荐指数
2
解决办法
2万
查看次数

XeLaTeX和pdfLaTeX之间的区别

我想,这一切都说明了一切.两个命令(pdflatexxelatex)都生成PDF.什么是技术/有效/历史/等.这两个命令之间的区别?我正在使用TeX Live.

latex pdflatex xetex

11
推荐指数
1
解决办法
8951
查看次数

C++中的const-correctness语义

为了fun and profit™,我正在用C++编写一个trie类(使用C++ 11标准.)

trie<T>有一个迭代器,trie<T>::iterator.(它们实际上都是函数 const_iterator s,因为你无法修改trie value_type.)迭代器的类声明看起来像这样:

template<typename T>
class trie<T>::iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
    friend class trie<T>;
    struct state {
        state(const trie<T>* const node, const typename std::vector<std::pair<typename T::value_type, std::unique_ptr<trie<T>>>>::const_iterator& node_map_it ) :
            node{node}, node_map_it{node_map_it} {}
// This pointer is to const data:
        const trie<T>* node;
        typename std::vector<std::pair<typename T::value_type, std::unique_ptr<trie<T>>>>::const_iterator node_map_it;
    };
public:
    typedef const T value_type;
    iterator() =default;
    iterator(const trie<T>* node) {
        parents.emplace(node, node->children.cbegin());
            // ...
    }
    // ...
private:
    std::stack<state> …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

11
推荐指数
1
解决办法
576
查看次数

缺少使用g ++ 4.8的std :: vector :: erase()的const_iterator重载

下面的例子将不会编译使用克++ 4.8.2:

#include <iostream>
#include <vector>
using namespace std;

int main() {
    vector<int> v {1, 2, 3};

    v.erase(v.cbegin()); // Compiler complains

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器说如下.(它不是很易读,但它抱怨说vector<int>::const_iterator和之间没有已知的转换vector<int>::iterator.)

prog.cpp: In function ‘int main()’:
prog.cpp:8:20: error: no matching function for call to ‘std::vector<int>::erase(std::vector<int>::const_iterator)’
  v.erase(v.cbegin());
                    ^
prog.cpp:8:20: note: candidates are:
In file included from /usr/include/c++/4.8/vector:69:0,
                 from prog.cpp:2:
/usr/include/c++/4.8/bits/vector.tcc:134:5: note: std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(std::vector<_Tp, _Alloc>::iterator) [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::iterator = __gnu_cxx::__normal_iterator<int*, std::vector<int> >; typename std::_Vector_base<_Tp, …
Run Code Online (Sandbox Code Playgroud)

c++ stl g++ c++11

11
推荐指数
2
解决办法
2827
查看次数

如何在BTreeSet中使用自定义比较器功能?

在C++中,可以自定义代码std::set用于对其参数进行排序.默认情况下它使用std::less,但可以使用Compare模板参数更改.

Rust BTreeSet使用Ord特征对类型进行排序.我不知道如何覆盖这种行为 - 它构建在容器存储的类型的类型约束中.

但是,构建一个按一些本地有用的度量标准排序的项目列表通常是有意义的,但这并不是始终比较项目的最佳方式.或者,假设我想对used类型的项目进行排序; 在这种情况下,Ord即使我愿意,也不可能为类型实现自己.

解决方法当然是建立一个简单的旧Vec项目,然后是sort它.但在我看来,这并不像插入时自动排序那样干净.

有没有办法使用Rust的容器类型的替代比较器?

rust

11
推荐指数
1
解决办法
773
查看次数

标签 统计

rust ×4

c++ ×3

c++11 ×2

.net ×1

android ×1

download ×1

g++ ×1

gac ×1

gacutil ×1

install ×1

iterator ×1

java ×1

latex ×1

mac-address ×1

pdflatex ×1

qt ×1

qt5 ×1

stl ×1

xetex ×1