我一直听说你不应该从没有虚拟析构函数的类中继承,而且我没有太注意,因为我只是不经常使用继承.即使您不想使用多态,此规则也适用,但您只想要所有类功能,并且还想添加更多功能?具体来说,只要我没有多态地使用它,下面的类是否安全,行为定义明确?(即没有删除派生对象的基本指针)
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) 我正在尝试将我的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)
有办法解决这个问题吗?
以下是一个简单的模拟,其中一个场是一个矩形区域,其中有两个球在其中弹跳.该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) 假设我有一个带有引用的结构,另一个带有该结构引用的结构,如下所示:
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) 如果我有课:
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?
我无法正确设置比较.这是我的问题的一个示例,我的代码错误地假设{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)
我可以用|| …
在powershell中,当我运行python程序时:
> python hello.py
Run Code Online (Sandbox Code Playgroud)
该程序直接在我正在使用的powershell窗口中运行并打印任何输出.但是当我尝试在没有显式调用python的情况下执行它时:
> hello.py
Run Code Online (Sandbox Code Playgroud)
它打开了一个单独的窗口.我如何解决这个问题,以便它的行为与我明确调用python时的行为方式相同?
根据文档,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.
我想为一个可以选择压缩数据的类编写一个序列化函数.我想使用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) 我在我的个人资料脚本中有这个.
$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) c++ ×4
powershell ×3
rust ×2
arrays ×1
boost ×1
compression ×1
d ×1
dmd ×1
github ×1
inheritance ×1
lifetime ×1
python ×1
reference ×1