小编Kob*_*obi的帖子

std :: visit如何使用std :: variant?

我期待在std:variant/std::visit这里DOC:http://en.cppreference.com/w/cpp/utility/variant/visit也是一派很多试图了解背后的神奇std::visitstd::variant.

所以我的问题如下.在所提供的示例中,在多态lambda和"overloaded"中都存在一些"魔术"发生,这使得从中提取正确的类型成为可能std::variant.

所以看看这个:

for (auto& v: vec) {
    std::visit(overloaded {
        [](auto arg) { std::cout << arg << ' '; },
        [](double arg) { std::cout << std::fixed << arg << ' '; },
        [](const std::string& arg) { std::cout << std::quoted(arg) << ' '; },
    }, v);
}
Run Code Online (Sandbox Code Playgroud)

对于每个v,这只是一个变体,如何调用正确的重载lambda函数?似乎有一些逻辑需要弄清楚具体所持有的确切类型std::variant,将其投射并将其分配给适当的函数.我的问题是它是如何工作的?同样的交易:

    std::visit([](auto&& arg) {
        using T = std::decay_t<decltype(arg)>;
        if constexpr (std::is_same_v<T, int>)
            std::cout << "int with value " …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

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

std::可选运算符*() 和运算符-&gt;() - 未定义的行为

当实例未初始化时同时具有operator*() 和operator->() - 未定义行为的动机是什么?

为什么不将其视为错误并抛出异常呢?

c++

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

Variadic类模板和继承 - 默认编译器生成的构造函数

为什么下面的代码只能使用默认的编译器生成的构造函数?我希望它适用于POD,但下面的结构可能不是POD所以它必须是别的东西.

template <typename ... T>
struct C : T ... {
   using T::operator()...;
};

// template class guidance feature of C++17
template <typename ... T>
C(T...) -> C<T...>;

int main(){
   C c { []{}, [](int){} };
   c(3);
}
Run Code Online (Sandbox Code Playgroud)

这个问题是对Jason的Turner C++每周第49/50期的后续跟进,他定义了一个可变构造函数 std::forward<T>(t)...

c++ c++17

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

'artifactory' 不受支持的 docker v2 存储库请求意味着什么

我的 docker 客户端/服务器版本是:

$ docker version
Client:
Version:           18.09.0
API version:       1.39
Go version:        go1.10.4
Git commit:        4d60db4
Built:             Wed Nov  7 00:49:01 2018
OS/Arch:           linux/amd64
Experimental:      false

Server: Docker Engine - Community
Engine:
Version:          18.09.0
API version:      1.39 (minimum version 1.12)
Go version:       go1.10.4
Git commit:       4d60db4
Built:            Wed Nov  7 00:16:44 2018
OS/Arch:          linux/amd64
Experimental:     false
Run Code Online (Sandbox Code Playgroud)

想使用 artifactory 来托管 docker。跑步时

docker login 
Run Code Online (Sandbox Code Playgroud)

得到:

“artifactory”的不支持的 docker v2 存储库请求

这个错误是什么意思?

人工抱怨的 V2 部分是什么?

artifactory docker

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

代码生成 - usleep vs std :: this_thread :: sleep_for

我试图评估usleep VS的std :: this_thread :: sleep_for,看到使用std :: this_thread :: sleep_for VS usleep时产生更多的指令.

结果:https: //godbolt.org/g/ZyCCmj

int main(int, char**)
{
    std::this_thread::sleep_for(std::chrono::milliseconds{30});
    usleep(30000);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在使用std :: this_thread :: sleep_for时看到带有usleep的<10条指令但是> 20条.

是否真的可以得出结论,与std :: this_thread :: sleep_for相比,usleep更有效率?

c++ c++11

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

字符串向量并使用 C++20 范围进行变换

以下 C++20 范围基本语法有什么问题 (Ubuntu 20.04, gcc g++ (Ubuntu 10-20200411-0ubuntu1) 10.0.1 20200411 (实验) [master revision bb87d5cc77d:75961caccb7:f883c46b4877f637e0fa5025b4d6b5c9 040ec566]):

#include <iostream>
#include <vector>
#include <ranges>

[[nodiscard]]
auto f(const std::vector<std::string>& vec) {
   return vec | std::views::transform([] (const std::string &f){ 
      return f.size(); });
}

int main() {
    const auto v = f({"c", "dddddddd", "aaaa", "bb"});
    for(auto i : v)
        std::cout << i << ' ';
    std::cout << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想获取一个字符串向量并将其转换为每个字符串的大小。

尝试使用 C++11 范围 for 循环进行迭代只会崩溃。在 gdb 中,我可以看到 std::ranges 视图指向无效内存。

使用与上面相同的结构处理非字符串效果很好。

c++ c++20

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

确定像count_if这样的C++ std算法函数的返回类型

如何确定std::函数的类型,如std::count_if?理想情况下,我想要以下内容

using ret = std::invoke_result_t<std::count_if, const char*, const char*,
                                 std::function<bool(const char)>>;
Run Code Online (Sandbox Code Playgroud)

但由于多种原因,这不起作用。我可以通过以下方式接近:

using f = std::function<bool(const char)>;
using ret = std::invoke_result_t<std::count_if, const char*, const char*, f>;
Run Code Online (Sandbox Code Playgroud)

但这还不够。

错误:

expected a type, got 'std::count_if'
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×6

c++17 ×2

artifactory ×1

c++11 ×1

c++20 ×1

docker ×1