小编Mih*_*los的帖子

将可变参数模板包装到元组矢量

使用C++ 14,我试图扩展实现以支持将在外部调用的ObserverCallback方法.

MyClass容器使用元组向量,其类型由可变参数模板指定.然后可以使用access <T>()来访问向量.

我需要的是实现一个应该向量添加元素的观察者.由于元素的类型可以是元组中的任何类型,我也模仿它:

template <typename ...T>
class Wrapper{
public:
    MyClass<T...> mc;

    template <typename U>
    void ObserverCallback(const U& element){
        mc.access<U>().push_back(element);
    }
};
Run Code Online (Sandbox Code Playgroud)

Wrapper类似乎有错误:

variadic2.cpp: In member function 'void Wrapper<T>::ObserverCallback(const U&)':
variadic2.cpp:71:20: error: expected primary-expression before '>' token
         mc.access<U>().push_back(element);
                    ^
variadic2.cpp:71:22: error: expected primary-expression before ')' token
         mc.access<U>().push_back(element);
                      ^
variadic2.cpp: In function 'int main(int, char**)':
variadic2.cpp:87:10: error: 'class MyClass<float, std::reference_wrapper<int>, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >' has no member named 'ObserverCallback'
     w.mc.ObserverCallback(string("a"));
Run Code Online (Sandbox Code Playgroud)

作为参考,我还附上完整的源列表:

#include <tuple>
#include <vector>
#include <functional> …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++14

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

重用可变参数类型

在下面的C++ 14代码中,我想使用可变参数模板创建一个PossibleTypes容器.接下来,我想创建另一个容器,其中包含先前指定类型的成员元组.

怎么会这样做呢?我想让Foo包含一个<int,double>元组,就像模板化的主题类型一样.

提前谢谢了.

#include <iostream>
#include <tuple>
#include <type_traits>

template <typename... T>
struct PossibleTypes {};

PossibleTypes<int,double> topics;

template <typename... T>
struct Foo{
    std::tuple<T...> member;
};

int main(){
    Foo<??(topics)??> x;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++14

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

将参数从 docker-compose.yml 传递到 docker 容器

我正在尝试从手动调用 docker 进行迁移,如下所示:

docker run -v /tmp/bazel:/data -p 9090:8080 buchgr/bazel-remote-cache --max_size=1300
Run Code Online (Sandbox Code Playgroud)

使用docker-compose.yml文件,但似乎不知道如何将--max_size其传递到容器:

version: "3"
services:
  worker:
    image: buchgr/bazel-remote-cache
    deploy:
      mode: replicated
      replicas: 2
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
    ports:
      - 9090:8080
      - 6060:6060
        #args:
        #- max_size=1300
    volumes:
      - "/bazel_cache:/data"

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - 8080:8080
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?我已经尝试过args: ..,但 docker 抱怨它:

$ docker stack deploy -c docker-compose.yml bazel_remote_cache
args Additional property …
Run Code Online (Sandbox Code Playgroud)

docker docker-compose

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

为什么不能使用类型别名来实现外部类型的特征?

我了解您无法实现Default当前板条箱中未实现的类型的特征。为什么不能将这些类型别名为内部使用的类型并执行此操作?

这不起作用(游乐场):

use std::collections::HashMap;

pub type MyPortMappings = HashMap<&'static str, (u32, &'static str)>;

impl Default for MyPortMappings {
    fn default() -> Self {
        let mut m = HashMap::new();
        m.insert("ftp", (21, "File Transfer Protocol"));
        m.insert("http", (80, "Hypertext Transfer Protocol"));
        m
    }
}
Run Code Online (Sandbox Code Playgroud)
error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate
 --> src/lib.rs:5:1
  |
5 | impl Default for MyPortMappings {
  | ^^^^^^^^^^^^^^^^^--------------
  | |                |
  | | …
Run Code Online (Sandbox Code Playgroud)

rust

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

Rust:两个哈希图的简单同时迭代,无需压缩

我试图用一个键同时循环遍历两个地图,而不调用 zip()。我似乎无法让以下代码工作。我究竟做错了什么?

main.rs

use std::collections::HashMap;

mod iteratemaps;

fn main() {
    let mut m1 = HashMap::new();
    m1.insert(0, 10);
    m1.insert(1, 11);
    m1.insert(2, 12);

    let mut m2 = HashMap::new();
    m2.insert(0, 20);
    m2.insert(1, 21);
    m2.insert(2, 22);

    iteratemaps::iterate_maps(&m1, &m2);
}
Run Code Online (Sandbox Code Playgroud)

iteratemaps.rs

use std::collections::HashMap;

pub fn iterate_maps(
    m1: &HashMap<u32, i32>,
    m2: &HashMap<u32, i32>,
) {
    // doesn't work
    for i in 0..m1.len() {
        println!("{:?}, {:?}", m1.get(&i), m2.get(&i));
    }

    // works
    // for (k, e1) in m1.iter() {
    //     let mut e2 = m2.get(k);
    //     println!("{:?}, {:?}", …
Run Code Online (Sandbox Code Playgroud)

rust

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

标签 统计

c++ ×2

c++14 ×2

rust ×2

variadic-templates ×2

docker ×1

docker-compose ×1