小编und*_*ndu的帖子

为什么堆栈内存大小如此有限?

在堆上分配内存时,唯一的限制是可用RAM(或虚拟内存).它使Gb成为记忆.

那么为什么堆栈大小如此有限(约1 Mb)?什么技术原因阻止你在堆栈上创建真正的大对象?

更新:我的意图可能不明确,我不想在堆栈上分配大对象,我不需要更大的堆栈.这个问题只是纯粹的好奇心.

c++ memory-management

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

程序静态链接到库但仍需要运行dll

在链接方面有一些我不理解的事情......我正在使用第三方库(GEOS库)编写程序.此程序依赖于geos.lib但仍需要运行geos.dll.

我读了这个问题,我想我理解静态库和动态库之间的区别.我不明白的是为什么我静态链接库时仍然需要一个dll.

c++ dll linkage

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

是Boost.Geometry足够成熟?

我最近被一家GIS公司雇用来重写旧的地理信息库.所以我目前正在寻找一个好的计算几何库.我见过CGAL,这太棒了,但我的老板想要一些免费的东西.

所以我现在正在检查Boost.Geometry.这个库看起来很棒,但它似乎也在快速变化.很多事情还没有实现,邮件列表上讨论了很多问题.

因此我的问题是:Boost.Geometry足够成熟,所以我可以在它上面构建一些东西吗?或者设计仍在发展?

谢谢

gis geometry boost computational-geometry boost-geometry

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

根据编译时参数使方法可用

有没有办法编译方法,取决于模板参数?我正在尝试创建一个可以处理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的问题,但据我所知,它是用来启用或禁用特定的重载.

问题是:是否有办法根据编译时参数使方法可用或不可用?

c++ c++11

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

将vector <shared_ptr <Derived >>传递给期望向量<shared_ptr <Base >>的函数

我正在使用我使用的代码结构的问题,如下(简化):

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)

c++ inheritance smart-pointers shared-ptr

4
推荐指数
1
解决办法
1113
查看次数

VS 2010:2次重载有类似的转换

我不明白这里发生了什么

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重载.在我的情况下,我看到第一个参数不足以选择好的函数,但为什么第二个参数不能解决模糊性?

c++ overloading

3
推荐指数
1
解决办法
276
查看次数

是一个虚拟函数,其原型不依赖于模板中有效的模板参数吗?

给出以下代码:

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++ templates

2
推荐指数
1
解决办法
66
查看次数