使用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++ 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) 我正在尝试从手动调用 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) 我了解您无法实现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) 我试图用一个键同时循环遍历两个地图,而不调用 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)