小编MaP*_*aPo的帖子

如何使用参数定义特征并返回类似Fn的类型?

我对以下代码感到困惑(代码清单13-9):

struct Cacher<T>
where
    T: Fn(i32) -> i32,
{
    calculation: T,
    value: Option<i32>,
}
Run Code Online (Sandbox Code Playgroud)

我知道这Fn是一个特征,但通常一个特征没有参数和返回类型.我怎样才能定义一个特征Fn

我试着看一下这个定义(实际上它是FnOnce,但Fn已经FnMut绑定并且FnMut已经FnOnce绑定了......),但我仍然感到困惑.那是什么意思<Args>?然后还有一些在Nomicon中写的东西 ; 但我不明白:

Fn(a, b, c) -> d本身就是不稳定的只是糖真正 Fn特质

syntax closures traits rust

3
推荐指数
1
解决办法
72
查看次数

C++:使用声明和重载范例

我正在查看此页面有关 C++17 的“新”功能。特别是我理解几乎所有以下代码:

#include <iostream>
#include <variant>

struct Fluid { };
struct LightItem { };
struct HeavyItem { };
struct FragileItem { };

template<class... Ts> struct overload : Ts... { using Ts::operator()...; };
template<class... Ts> overload(Ts...) -> overload<Ts...>;

int main() {
    std::variant<Fluid, LightItem, HeavyItem, FragileItem> package;

    std::visit(overload{
        [](Fluid& )       { std::cout << "fluid\n"; },
        [](LightItem& )   { std::cout << "light item\n"; },
        [](HeavyItem& )   { std::cout << "heavy item\n"; },
        [](FragileItem& ) { std::cout << "fragile\n"; }
    }, …
Run Code Online (Sandbox Code Playgroud)

c++ overloading c++17

3
推荐指数
1
解决办法
128
查看次数

在类构造函数体内初始化 lambda 函数

我可以毫无问题地编译以下代码(使用 gcc 11.1.0):

\n
#include <iostream>\n\ntemplate <typename Func>\nclass K {\n    Func f;\npublic:\n    K(Func _f): f{_f} {};\n    void do_thing(int x) {f(x);};\n};\n\nint main()\n{\n    auto f = [](int x) {std::cout << x << std::endl;};\n    K kl{f};\n    kl.do_thing(5);\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是我想在类的构造函数中执行一些检查K(例如某些函数std::is_convertible_v内部的一些bool检查),所以我尝试将代码修改为

\n
#include <iostream>\n\ntemplate <typename Func>\nclass K {\n    Func f;\n    \npublic:\n    K(Func _f) {\n    ...\n    f = _f;};\n    void do_thing(int x) {f(x);};\n};\n\nint main()\n{\n    auto f = [](int x) {std::cout << x << std::endl;};\n    K kl{f};\n    kl.do_thing(5);\n\n    return …
Run Code Online (Sandbox Code Playgroud)

c++ lambda constructor member-initialization

2
推荐指数
1
解决办法
831
查看次数

C++ bool 模板参数和编译时间 if

我有以下功能

template <bool c>
void func()
{
    ...
    if (c) {
        // do something
    } else {
        // do something else
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数将在循环内多次使用:

for (...) {
    func<true>();
}
Run Code Online (Sandbox Code Playgroud)

我想知道内部 func 是否在编译时、运行时完成,或者是否留给编译器完成。

c++ templates if-statement

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