我对以下代码感到困惑(代码清单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特质
我正在查看此页面有关 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) 我可以毫无问题地编译以下代码(使用 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}\nRun Code Online (Sandbox Code Playgroud)\n但是我想在类的构造函数中执行一些检查K(例如某些函数std::is_convertible_v内部的一些bool检查),所以我尝试将代码修改为
#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) 我有以下功能
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++ ×3
c++17 ×1
closures ×1
constructor ×1
if-statement ×1
lambda ×1
overloading ×1
rust ×1
syntax ×1
templates ×1
traits ×1