在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存).它使Gb成为记忆.
那么为什么堆栈大小如此有限(约1 Mb)?什么技术原因阻止你在堆栈上创建真正的大对象?
更新:我的意图可能不明确,我不想在堆栈上分配大对象,我不需要更大的堆栈.这个问题只是纯粹的好奇心.
在链接方面有一些我不理解的事情......我正在使用第三方库(GEOS库)编写程序.此程序依赖于geos.lib但仍需要运行geos.dll.
我读了这个问题,我想我理解静态库和动态库之间的区别.我不明白的是为什么我静态链接库时仍然需要一个dll.
我最近被一家GIS公司雇用来重写旧的地理信息库.所以我目前正在寻找一个好的计算几何库.我见过CGAL,这太棒了,但我的老板想要一些免费的东西.
所以我现在正在检查Boost.Geometry.这个库看起来很棒,但它似乎也在快速变化.很多事情还没有实现,邮件列表上讨论了很多问题.
因此我的问题是:Boost.Geometry足够成熟,所以我可以在它上面构建一些东西吗?或者设计仍在发展?
谢谢
有没有办法编译方法,取决于模板参数?我正在尝试创建一个可以处理2,3或更多维度的Coordinate类.我想提供access方法as x(),y()和z(),但我希望z()方法只有在尺寸大于3时才可访问.现在(如下所示),我使用a static_assert来防止使用z()尺寸2的坐标.
template<typename DataType, int Dimension>
class Coord
{
private:
std::array<DataType, Dimension> _data;
public:
// how to achieve some kind of compile_if()
DataType& z()
{
static_assert(Dimension >= 3, "Trying to access an undefined dimension.");
return _data[2];
}
};
Run Code Online (Sandbox Code Playgroud)
我想要做的是隐藏z()维度2的存在,以便这样做
Coord<int, 2> ci2(0,0);
ci2.z() = 3; // shouldn't compile
Run Code Online (Sandbox Code Playgroud)
不使用static_assert就不编译.我见过很多关于std :: enable_if的问题,但据我所知,它是用来启用或禁用特定的重载.
问题是:是否有办法根据编译时参数使方法可用或不可用?
我正在使用我使用的代码结构的问题,如下(简化):
class SPoint
{
public:
SPoint(double x, double y, double z) : _x(x), _y(y), _z(z) {}
protected:
double _x, _y, _z;
}
class Point3D : public SPoint
{
public:
Point3D(double x, double y, double z) : SPoint(x, y, z) { // default values for U and V }
protected:
double U, V;
}
Run Code Online (Sandbox Code Playgroud)
这些点用于创建折线:
class SPolyline
{
public:
SPolyline(const vector<shared_ptr<SPoint>>& points) { // points are cloned into _points}
protected:
vector<shared_ptr<SPoint>> _points;
};
class Polyline3D : SPolyline
{
public :
Polyline3D(const …Run Code Online (Sandbox Code Playgroud) 我不明白这里发生了什么
class A{};
class B : A {};
void func(A&, bool){}
void func(B&, double){}
int main(void)
{
B b;
A a;
bool bo;
double d;
func(b, bo);
}
Run Code Online (Sandbox Code Playgroud)
编译时,Visual 2010会在线提供此错误 func(b, bo);
2 overloads have similar conversions
could be 'void func(B &,double)'
or 'void func(A &,bool)'
while trying to match the argument list '(B, bool)'
Run Code Online (Sandbox Code Playgroud)
我不明白为什么bool参数不足以解决过载问题.我已经看到了这个问题,并且在接受的答案中指出,bool应该更喜欢bool重载.在我的情况下,我看到第一个参数不足以选择好的函数,但为什么第二个参数不能解决模糊性?
给出以下代码:
template <class T>
class A
{
public:
virtual void Foo() {};
virtual void Bar(const T& t) {};
};
Run Code Online (Sandbox Code Playgroud)
我知道Bar不允许上面的虚函数,因为模板是在编译时生成的,虚函数使用虚拟表,这在运行时发生,这意味着该虚拟函数没有有限数量的签名可以满足虚拟表.
但是,如果该功能具有不依赖于签名T,如Foo上述,将仍然是非法的?
c++ ×6
boost ×1
c++11 ×1
dll ×1
geometry ×1
gis ×1
inheritance ×1
linkage ×1
overloading ×1
shared-ptr ×1
templates ×1