在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++程序员的欢迎.
我有关于如何从基数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?
比如为什么在STL实现大多数成员_M_
或_
或__
前缀?为什么有那么多样板代码?
C++缺少哪些功能可以使make vector(例如)实现更清晰,更简洁?
好吧,标题是满口的,我认为这可能是为什么很难通过谷歌或这个网站找到答案.可能只是因为我不知道如何正确表达问题,但这里有:
我在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) 我如何定义一个函数,它将迭代器作为输入作为任何类型的STL容器,但仅限于特定模板类型的那些.例如:
任何形式的迭代器std::list<Unit*>::iterator
或 std::vector<Unit*>::iterator
我只想定义要采用的函数std::list<Unit*>::iterator
,但是如果我们切换到不同的STL容器,我不想更改我的代码.
有没有办法用模板或其他方式做到这一点?
在我当前的项目中,我已经分离了我的类文件和头文件.我的项目结构目前看起来像这样:
项目
我的问题是我不知道如何将头文件包含到类文件中.我无法链接到不在同一级别或子文件夹中的标头?或者是否有一些方法可以从项目根目录中继续下去?例如:
#include "Project/Headers/include/class1.h"
在class1.cpp文件中
考虑:
>>> 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) 我在Google App Engine中有一个带有日期字段的简单表格.我想查询所有行,其中包含从现在到6小时之前的日期字段.我该如何形成这个查询?
C中的以下代码是否定义了行为?
int main() {
const int i = 0;
return *(int*)(&i);
}
Run Code Online (Sandbox Code Playgroud)
我问,因为6.5/7列出了"与对象的有效类型兼容的类型的合格版本"作为有效别名.但是对象的有效类型是const int
,我认为不是int
合格版本const int
(尽管反之亦然).既不是int
和const int
兼容(6.7.3/10).
此外,6.3.2.3/2表示您可以通过添加限定符来转换指针类型,并且结果指针是相等的.6.3.2.3/7表示你可以转换任何两种指针类型(因此(int*)(&i)
允许转换本身).但是并没有说结果指针指的是同一个对象,甚至它是相等的.它说的是它可以转换回原始类型(在这种情况下const int*
).也就是说,即使别名是合法的,我也不清楚标准是否保证我的指针转换确实会导致指向的指针i
.
那么,标准是否实际定义了我的代码的行为,如果是,那么这个定义在哪里?
我知道代码在实践中有效.我想到了一个不起作用的假设(和奇怪)实现.我可以问这个实现是否符合标准(如果不符合,它违反了哪个部分),但如果还有其他方面,我想象的实现无法符合,我不想浑水.如果有人认为这将有助于他们回答问题,我将描述实施.
标题是不言自明的:有没有人知道C的(好的)属性文件阅读器库,如果没有,C++?
[编辑:具体来说,我想要一个处理Java中使用的.properties文件格式的库:http://en.wikipedia.org/wiki/.properties]
c++ ×7
c ×3
stl ×2
c++11 ×1
const ×1
function ×1
gql ×1
gqlquery ×1
ieee-754 ×1
include ×1
overloading ×1
pickle ×1
polymorphism ×1
properties ×1
python ×1
python-2.x ×1
readability ×1