小编ben*_*ben的帖子

我可以编写一个自我变异的迭代器,然后产生一个引用吗?

我遇到了一个简化为以下问题的问题:

struct MyIter {
    vec: Vec<i8>,
}

fn fill_with_useful_data(v: &mut Vec<i8>) {
    /* ... */
}

impl<'a> Iterator for MyIter {
    type Item = &'a [i8];

    fn next(&mut self) -> Option<&'a [i8]> {
        fill_with_useful_data(&mut self.vec);

        Some(&self.vec)
    }
}

fn main() {
    for slice in (MyIter { vec: Vec::new() }) {
        println!("{}", slice);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会生成错误:

error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates
 --> src/main.rs:9:6
  |
9 | impl<'a> Iterator for MyIter …
Run Code Online (Sandbox Code Playgroud)

rust

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

C++标准中的措辞允许static_cast <non-void-type*>(malloc(N)); 上班?

据我所知,5.2.9静态void*强制转换中的措辞,唯一一次允许对象 - 指针转换void*的结果是第一次出现逆转换的结果.

在整个标准中,有一堆对指针表示的引用,并且指针的表示与指针的表示void相同char,依此类推,但它似乎从未明确表示投射任意void指针会产生指针在内存中的相同位置,具有不同的类型,非常类似于类型 - 惩罚是未定义的,而不是回到对象的实际类型.

因此,虽然malloc清楚地返回合适内存的地址等等,但就我所见,似乎没有任何方法可以实际使用它.

c++ malloc object-lifetime static-cast language-lawyer

7
推荐指数
1
解决办法
1446
查看次数

什么是直接定义转换函数以引用数组的ISO C++方法?

根据标准,转换函数有一个function-id operator conversion-type-id,就像operator char(&)[4]我相信的那样.但我无法弄清楚函数参数列表的放置位置.GCC不接受任何一种operator char(&())[4]operator char(&)[4]()或任何我能想到的.

现在,gcc似乎接受(&operator char ())[4]但是clang不接受,而且我也倾向于不接受,因为它似乎不符合我所理解的语法.

我不想使用a,typedef因为我想避免使用它来污染命名空间.

c++ operator-overloading

5
推荐指数
1
解决办法
191
查看次数

如何存储SQLite准备好的语句供以后使用?

现在我有代码使用rusqlitesqlite绑定打开数据库连接并在我的应用程序中执行一堆数据库操作,如下所示:

extern crate rusqlite;

use rusqlite::SqliteConnection;

struct MyAppState {
    db: SqliteConnection,
    // ... pretend there's other fields here ...
}

impl MyAppState {
    fn new() -> MyAppState {
        let db = SqliteConnection::open(":memory:").unwrap();
        MyAppState {
            db: db
        }
    }

    fn query_some_info(&mut self, arg: i64) -> i64 {
        let mut stmt = self.db.prepare("SELECT ? + 1").unwrap();
        let mut result_iter = stmt.query(&[&arg]).unwrap();
        let result = result_iter.next().unwrap().unwrap().get(0);

        result
    }
}

fn main() {
    let mut app = MyAppState::new();
    for i in …
Run Code Online (Sandbox Code Playgroud)

sqlite rust

5
推荐指数
1
解决办法
612
查看次数

什么语言实现函数式编程的功能?

Lisp在学术界很早就开发了一套有趣的语言功能,但大多数都没有在生产环境中流行.

有些语言,比如JavaScript,改编了基本功能,如垃圾收集和词法闭包,但所有可能实际上改变你大规模编写程序的东西,比如功能强大的宏,代码作为数据的东西和自定义控件结构,似乎在其他功能语言中传播,其中任何一种都不适用于非平凡的项目.

功能编程社区还提出了许多其他有趣的想法(除了函数式编程本身),如引用透明性,通用案例表达式(即模式匹配,不像C/C#开关那样残缺)和curried函数,似乎在常规编程中显然很有用,并且应该很容易与现有的编程实践集成,但由于某种原因似乎永远陷入了学术界.

为什么这些功能很难被采用?是否有任何现代的,实用的语言实际上是从Lisp中学习而不是半复杂地复制"一流的功能",还是存在使这不可能的内在冲突?

lisp enterprise haskell functional-programming ml

1
推荐指数
8
解决办法
1544
查看次数