小编Ben*_*ley的帖子

从没有虚拟析构函数的类继承

我一直听说你不应该从没有虚拟析构函数的类中继承,而且我没有太注意,因为我只是不经常使用继承.即使您不想使用多态,此规则也适用,但您只想要所有类功能,并且还想添加更多功能?具体来说,只要我没有多态地使用它,下面的类是否安全,行为定义明确?(即没有删除派生对象的基本指针)

template<typename T>
class SomewhatSafeVector : public std::vector<T>
{
public:
    typedef std::vector<T> base;

    T& operator[](unsigned n) {
        if (n >= base::size())
        {
            throw IndexOutOfBounds();
        }
        return base::operator[](n);
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

7
推荐指数
2
解决办法
3182
查看次数

将SSH密钥添加到剪贴板的Powershell/github问题

我正在尝试将我的SSH密钥添加到Github,但是我遇到了一个问题:

我尝试在Windows Powershell中运行以下命令来获取密钥:

clip < ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

The '<' operator is reserved for future use.
Run Code Online (Sandbox Code Playgroud)

有办法解决这个问题吗?

powershell github

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

将可变自引用传递给自有对象的方法

以下是一个简单的模拟,其中一个场是一个矩形区域,其中有两个球在其中弹跳.该Fieldstruct有一个update方法,它调用update每个球.在他们的update方法中,球需要根据它们的速度移动.但他们也需要相互反应,以及该领域的界限:

fn main() {
    let mut field = Field::new(Vector2d { x: 100, y: 100 });
    field.update();
}

#[derive(Copy, Clone)]
struct Vector2d {
    x: i32,
    y: i32,
}

struct Ball {
    radius: i32,
    position: Vector2d,
    velocity: Vector2d,
}

impl Ball {
    fn new(radius: i32, position: Vector2d, velocity: Vector2d) -> Ball {
        Ball {
            radius: radius,
            position: position,
            velocity: velocity,
        }
    }

    fn update(&mut self, field: &Field) {
        // check collisions with walls
        // …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

7
推荐指数
2
解决办法
1681
查看次数

生命周期和对包含引用的对象的引用

假设我有一个带有引用的结构,另一个带有该结构引用的结构,如下所示:

struct Image<'a> {
    pixel_data: &'a mut Vec<u8>,
    size: (i32, i32),
}

struct SubImage<'a> {
    image: &'a mut Image<'a>,
    offset: (i32, i32),
    size: (i32, i32),
}
Run Code Online (Sandbox Code Playgroud)

结构具有几乎相同的接口,不同之处在于SubImage在转发到所包含的Image引用的相应功能之前基于其偏移调整位置参数.我希望这些结构大多可以互换,但我似乎无法弄清楚如何让生命正确.最初,我只是在使用Image,并且可以简单地传递对象,而不会使用终身说明符:

fn main() {
    let mut pixel_data: Vec<u8> = Vec::new();
    let mut image = Image::new(&mut pixel_data, (1280, 720));
    render(&mut image);
}

fn render(image: &mut Image) {
    image.rect_fill(0, 0, 10, 10);
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了SubImage,并希望做这样的事情:

fn render2(image: &mut Image) {
    let mut sub = SubImage {
        image: image,           // …
Run Code Online (Sandbox Code Playgroud)

reference lifetime rust

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

在另一个类的构造函数中初始化类对象的数组

如果我有课:

class A
{
private:
     char z;
     int x;

public:
     A(char inputz, int inputx);
     ~A() {}
}
Run Code Online (Sandbox Code Playgroud)

我想A在课堂上制作一个数组B.

class B
{
private:
    A arrayofa[26];

public:
    B();
    ~B() {}
    void updatearray(); // This will fill the array with what is needed.
}


class B
{
    B:B()
    {
        updatearray();
        std::sort( &arrayofa[0], &arrayofa[26], A::descend );
    }
}
Run Code Online (Sandbox Code Playgroud)

如何arrayofa在构造函数中显式初始化B

c++ arrays data-structures

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

如何比较结构

我无法正确设置比较.这是我的问题的一个示例,我的代码错误地假设{1,2} = {2,1}:http://ideone.com/i7huL

#include <iostream>
#include <map>
using namespace std;

struct myStruct {
  int a;
  int b;
  bool operator<(const myStruct& rhs) const {
           return rhs.a < this->a && rhs.b < this->b;
  }
};


int main() {
       std::map  <myStruct, int> mymap ;
       myStruct m1={1,2};
       myStruct m2={2,1};
       mymap.insert(make_pair(m1,3));
       std::map<myStruct, int>::iterator it1 = mymap.find(m1);
       std::map<myStruct, int>::iterator it2 = mymap.find(m2);
       cout << it1->second << it2->second;
       // here it1->second=it2->second=3, although I would have expected it2 to be equal to map.end().
}
Run Code Online (Sandbox Code Playgroud)

我可以用|| …

c++

6
推荐指数
3
解决办法
2万
查看次数

无需打开单独的shell即可运行python程序

在powershell中,当我运行python程序时:

> python hello.py
Run Code Online (Sandbox Code Playgroud)

该程序直接在我正在使用的powershell窗口中运行并打印任何输出.但是当我尝试在没有显式调用python的情况下执行它时:

> hello.py
Run Code Online (Sandbox Code Playgroud)

它打开了一个单独的窗口.我如何解决这个问题,以便它的行为与我明确调用python时的行为方式相同?

python powershell

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

为什么readf没有返回值?

根据文档,readf应该返回一个uint.但即便是这个简单的例子也无法编译:

你好ð

import std.stdio;

void main() {
    int x;
    uint r = readf("%s", &x);    
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

hello.d(5): Error: expression readf("%s",& x) is void and has no value
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

我正在使用dmd(Digital Mars D)编译器v2.050.

d dmd

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

使用boost :: archive和boost :: iostreams来压缩数据

我想为一个可以选择压缩数据的类编写一个序列化函数.我想使用boost :: iostreams中提供的压缩工具.有谁知道如何做到这一点?

struct X
{
    X() {}

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & compression;
        if(compression == 0)
        {
            ar & data;
        }
        else if(compression == 1)
        {
            // use boost::iostream compression
            // facilities to serialize data
        }
    }

    int compression;
    std::vector<int> data;
};
Run Code Online (Sandbox Code Playgroud)

c++ compression serialization boost

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

调用函数时变量不更新

我在我的个人资料脚本中有这个.

$AddablePaths = @{
    "python3"=";C:\Python32";
    "python2"=";C:\Python27";
    "D"=";C:\D\dmd2\windows\bin";
    "gcc"=";C:\MinGW\bin";
    "verge"=";C:\Users\Cold\Dev\Verge\tools";
    "ruby"=";C:\Ruby192\bin";
    "git"=";C:\Program Files\Git\cmd";
    "cmake"=";C:\Program Files\CMake 2.8\bin";
    "emacs"=";C:\Users\Cold\Dev\emacs\bin";
    "notepad++"=";C:\Program Files\Notepad++";
    "boost-build"=";C:\Users\Cold\Dev\C++\boost-build\bin";
    "svn"=";C:\Program FIles\SlikSvn\bin";
    "gtk2"=";C:\Program Files\GTK2-Runtime\bin";
    "qt"=";C:\Qt\bin";
    "komodo"=";C:\Program Files\ActiveState Komodo Edit 6\";
    "hg"=";C:\Program Files\TortoiseHg\"
}

$AddedPaths = @()

function AddPath($keys)
{
    if ($keys.Count -eq 0) { return }

    foreach ($key in $keys)
    {
        if ($AddablePaths.Contains($key))
        {
            if (!($AddedPaths -contains $key))
            {
                $env:Path += $AddablePaths[$key]
                $AddedPaths += $key
            }
        }
        else
        {
            Write-Host "Invalid path option. Options are:"
            foreach ($key in $AddablePaths.keys) {
                Write …
Run Code Online (Sandbox Code Playgroud)

powershell

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