小编Ros*_*ght的帖子

如何指定 AsRef 的生命周期?

我正在尝试编写一个连接两个可迭代对象的函数,其中的项目可以转换为OsStr引用,并且在尝试指定引用的生命周期时遇到了巨大的困难。

use std::convert::AsRef;
use std::ffi::OsStr;
use std::marker::PhantomData;

#[derive(Clone, Debug)]
#[must_use = "join_args is lazy and does nothing unless consumed"]
pub struct JoinArgs<'a, A: 'a, B: 'a> {
    a: A,
    b: B,
    state: JoinState,

    phantomA: PhantomData<&'a A>,
    phantomB: PhantomData<&'a B>,
}

#[derive(Clone, Debug)]
enum JoinState {
    Both,
    Front,
    Back,
}

/// Chains two iterable argument lists.
pub fn join_args<'a, I1, S1, I2, S2>(iter1: I1, iter2: I2) -> JoinArgs<'a, I1::IntoIter, I2::IntoIter>
where
    I1: IntoIterator<Item = S1>,
    S1: AsRef<OsStr> + 'a, …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何在OGRE中使用SDL?

当我使用带有SDL的OGRE时(如本文所述),我似乎遇到了出现在主渲染窗口后面的第二个窗口.基本上,我使用的代码是这样的:

SDL_init(SDL_INIT_VIDEO);
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);

Ogre::Root *root = new Ogre::Root();
root->restoreConfig();
root->initialise(false);

Ogre::NameValuePairList windowSettings;
windowSettings["currentGLContext"] = Ogre::String("True");
Ogre::RenderWindow *window = root->createRenderWindow("MainRenderWindow", 640, 480, false, &windowSettings);
window->setVisible(true);
Run Code Online (Sandbox Code Playgroud)

问题是,我如何摆脱额外的窗口?

仅供后人使用,我使用的是OGRE 1.6.4,Mac OS X 10.6.2和SDL 1.2.14.

c++ sdl ogre3d

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

如何消除特征对象边界中关联类型的歧义?

如果我尝试定义IEvent像这样的盒装字段:

use stdweb::private::ConversionError;
use stdweb::web::event::IEvent;

struct Foo {
    bar: Box<IEvent<Error = ConversionError>>,
}
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

error[E0221]: ambiguous associated type `Error` in bounds of `stdweb::traits::IEvent`
  --> src/events.rs:16:21
   |
16 |     bar: Box<IEvent<Error = ConversionError>>,
   |                     ^^^^^^^^^^^^^^^^^^^^^^^ ambiguous associated type `Error`
   |
note: associated type `stdweb::traits::IEvent` could derive from `stdweb::unstable::TryFrom<stdweb::Reference>`
  --> src/events.rs:16:21
   |
16 |     bar: Box<IEvent<Error = ConversionError>>,
   |                     ^^^^^^^^^^^^^^^^^^^^^^^
note: associated type `stdweb::traits::IEvent` could derive from `stdweb::unstable::TryFrom<stdweb::Value>`
  --> src/events.rs:16:21
   |
16 |     bar: Box<IEvent<Error = ConversionError>>,
   |                     ^^^^^^^^^^^^^^^^^^^^^^^

If …
Run Code Online (Sandbox Code Playgroud)

generics rust

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

使用KMS时尝试将一些代码转换为Go CDK

我有一些代码可以从Google Cloud Storage上传和下载文件。下面是一个简短的示例:

import (
    "context"
    "io"
    "cloud.google.com/go/storage"
)

func upload(bucket, keyName, path string, reader io.Reader) error {
    ctx := context.Background()
    client, err := storage.NewClient(ctx)

    if err != nil {
        return err
    }
    defer client.Close()

    obj := client.Bucket(bucket).Object(path)
    writer := obj.NewWriter(ctx)

    defer writer.Close()

    writer.KMSKeyName = keyName

    if _, err = io.Copy(writer, reader); err != nil {
        return err
    }
    if err = writer.Close(); err != nil {
        return err
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)

棘手的部分是,我正在使用Google KMS来管理用于加密文件的密钥(Google的“客户管理的加密密钥”方案)。我的理解是这种加密发生在Google的一端。

我发现使用Go CDK的唯一解决方案是使用Google KMS加密文件,然后上传加密的Blob。没有办法像以前使用Go CDK一样指定加密密钥吗?

谢谢

go google-cloud-storage google-cloud-kms go-cdk

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

C++的默认继承访问说明符?

我有一些遗留代码,我必须包装,我遇到了这个声明:

class Foo : Bar
{
    // ...
};
Run Code Online (Sandbox Code Playgroud)

这似乎是在GCC下编译的.我知道这很糟糕,但我无法改变它.我的问题是,如果没有继承访问说明符,C++编译器如何处理它?

c++ gcc

4
推荐指数
2
解决办法
2572
查看次数

标签 统计

c++ ×2

rust ×2

gcc ×1

generics ×1

go ×1

go-cdk ×1

google-cloud-kms ×1

google-cloud-storage ×1

ogre3d ×1

sdl ×1