小编Ste*_*sop的帖子

向量的通用向量在C++中

在C++中有一种很好的方法来实现(或伪造)一个通用矢量向量的类型吗?

忽略向量向量是一个好主意的问题(除非有等价的东西总是更好).假设它确实对问题进行了精确建模,并且矩阵不能准确地模拟问题.假设将这些事物作为参数的模板化函数确实需要操纵结构(例如调用push_back),因此它们不能仅仅采用泛型类型支持[][].

我想做的是:

template<typename T>
typedef vector< vector<T> > vecvec;

vecvec<int> intSequences;
vecvec<string> stringSequences;
Run Code Online (Sandbox Code Playgroud)

但当然这是不可能的,因为typedef不能模板化.

#define vecvec(T) vector< vector<T> >
Run Code Online (Sandbox Code Playgroud)

很接近,并且可以保存在vecvecs上运行的每个模板化函数中复制类型,但不会受到大多数C++程序员的欢迎.

c++ stl

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

在二进制表示法中,小数点后面的数字是什么意思"."?

我有关于如何从基数10转换为IEEE 754浮点表示的示例

Number: 45.25 (base 10) = 101101.01 (base 2) Sign: 0
Normalized form N = 1.0110101 * 2^5
Exponent esp = 5  E = 5 + 127 = 132 (base 10) = 10000100 (base 2)
IEEE 754: 0 10000100 01101010000000000000000
Run Code Online (Sandbox Code Playgroud)

除了一段之外,这对我有意义:

45.25 (base 10) = 101101.01 (base 2)
Run Code Online (Sandbox Code Playgroud)

45是二进制的101101,没关系..但他们是如何获得0.25的.01?

c c++ floating-point ieee-754

42
推荐指数
5
解决办法
3238
查看次数

为什么STL实现如此难以理解?如何在这里改进C++?

比如为什么在STL实现大多数成员_M____前缀?为什么有那么多样板代码?

C++缺少哪些功能可以使make vector(例如)实现更清晰,更简洁?

c++ stl readability c++11

32
推荐指数
2
解决办法
4178
查看次数

将重载函数与其多态参数匹配

好吧,标题是满口的,我认为这可能是为什么很难通过谷歌或这个网站找到答案.可能只是因为我不知道如何正确表达问题,但这里有:

我在SimpleOpenGLRenderer类中有一系列方法,它们都采用扩展Model类的单个参数.因此,根据模型的类型,渲染器将调用知道如何渲染它的正确方法.以下是基于该问题的简化可执行示例:

#include <stdio.h>

class Model {};

class Cube : public Model {};

class Sphere : public Model {};

class Renderer
{
  public:
    virtual void renderModel(const Model& model) = 0;
};

class SimpleOpenGLRenderer
{
  public:
    void renderModel(const Cube& model)
    {
      printf("Render the cube.\n");
    }

    void renderModel(const Model& model)
    {
      printf("Throw an exception, my renderer does not support the model type you have provided.\n");
    }

    void renderModel(const Sphere& model)
    {
      printf("Render the sphere.\n");
    }
};

int
main(int …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism overloading function

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

将STL迭代器作为特定类型元素的任何容器的函数

我如何定义一个函数,它将迭代器作为输入作为任何类型的STL容器,但仅限于特定模板类型的那些.例如:

任何形式的迭代器std::list<Unit*>::iterator std::vector<Unit*>::iterator

我只想定义要采用的函数std::list<Unit*>::iterator,但是如果我们切换到不同的STL容器,我不想更改我的代码.

有没有办法用模板或其他方式做到这一点?

c++

17
推荐指数
4
解决办法
5468
查看次数

如何包含其他文件夹中的文件?

在我当前的项目中,我已经分离了我的类文件和头文件.我的项目结构目前看起来像这样:

  • 项目

    • 资源
      • SRC
        • class1.cpp
        • class2.cpp
      • main.cpp中
      • 包括
        • class1.h
        • class2.h

我的问题是我不知道如何将头文件包含到类文件中.我无法链接到不在同一级别或子文件夹中的标头?或者是否有一些方法可以从项目根目录中继续下去?例如:
#include "Project/Headers/include/class1.h"在class1.cpp文件中

c++ include

16
推荐指数
2
解决办法
5万
查看次数

为什么pickle协议2让我序列化一个打开的文件对象?

考虑:

>>> import pickle
>>> thing = open('foobar.txt','w')
>>> pickle.dumps(thing)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/pickle.py", line 1366, in dumps
    Pickler(file, protocol).dump(obj)
  File "/usr/lib/python2.6/pickle.py", line 224, in dump
    self.save(obj)
  File "/usr/lib/python2.6/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/usr/lib/python2.6/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle file objects
Run Code Online (Sandbox Code Playgroud)

似乎完全合理 - 当然我不能腌制一个打开的文件句柄.但:

>>> pickle.dumps(thing, 2)
'\x80\x02c__builtin__\nfile\nq\x00)\x81q\x01.'
>>> pickle.loads(pickle.dumps(thing, 2))
<closed file '<uninitialized file>', mode '<uninitialized …
Run Code Online (Sandbox Code Playgroud)

python pickle python-2.x

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

如何在GQL中查询过去6小时(日期时间)内的所有条目?

我在Google App Engine中有一个带有日期字段的简单表格.我想查询所有行,其中包含从现在到6小时之前的日期字段.我该如何形成这个查询?

google-app-engine gql gqlquery

14
推荐指数
2
解决办法
7202
查看次数

从指向const的指针中删除const是否遵循C中的严格别名,并引用同一个对象?

C中的以下代码是否定义了行为?

int main() {
    const int i = 0;
    return *(int*)(&i);
}
Run Code Online (Sandbox Code Playgroud)

我问,因为6.5/7列出了"与对象的有效类型兼容的类型的合格版本"作为有效别名.但是对象的有效类型是const int,我认为不是int合格版本const int(尽管反之亦然).既不是intconst int兼容(6.7.3/10).

此外,6.3.2.3/2表示您可以通过添加限定符来转换指针类型,并且结果指针是相等的.6.3.2.3/7表示你可以转换任何两种指针类型(因此(int*)(&i)允许转换本身).但是并没有说结果指针指的是同一个对象,甚至它是相等的.它说的是它可以转换回原始类型(在这种情况下const int*).也就是说,即使别名是合法的,我也不清楚标准是否保证我的指针转换确实会导致指向的指针i.

那么,标准是否实际定义了我的代码的行为,如果是,那么这个定义在哪里?

我知道代码在实践中有效.我想到了一个不起作用的假设(和奇怪)实现.我可以问这个实现是否符合标准(如果不符合,它违反了哪个部分),但如果还有其他方面,我想象的实现无法符合,我不想浑水.如果有人认为这将有助于他们回答问题,我将描述实施.

c const strict-aliasing language-lawyer

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

C(或C++)的属性文件库

标题是不言自明的:有没有人知道C的(好的)属性文件阅读器库,如果没有,C++?

[编辑:具体来说,我想要一个处理Java中使用的.properties文件格式的库:http://en.wikipedia.org/wiki/.properties]

c c++ properties

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