小编Ram*_*Ram的帖子

如何调用std :: exception_ptr上的what()

这是我的代码.

try
{
// code throws potentially unknown exception
}
catch (...)
{
    std::exception_ptr eptr =  std::current_exception();
        // then what ?
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,如果它是std :: exception,我想获得与异常相关联的字符串.

c++ exception c++11

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

查找动态分配的数组的大小

为什么不能以这种方式获得缓冲区的长度.

AType * pArr = new AType[nVariable];
Run Code Online (Sandbox Code Playgroud)

取消分配相同的数组时

delete [] pArr;
Run Code Online (Sandbox Code Playgroud)

运行时必须知道释放多少.在删除数组之前是否有任何方法可以访问该长度.如果不是,为什么没有提供这样的API来获取长度?

c++ size new-operator dynamic-allocation

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

基于整数范围的模板专业化

我试图将基于整数值的特化作为模板类型.如果我使用单个整数,专业化是直截了当的.是否可以在不使用boost基础的情况下基于范围进行简单的模板专业化.

这是代表性的代码转换为

template <typename int val>
class Param
{
public:

};

template <> class Param<0 to 100>
{

};

template <> class Param<100 to 175>
{

};
Run Code Online (Sandbox Code Playgroud)

c++ templates

15
推荐指数
2
解决办法
3160
查看次数

透视投影中的3D场景平移(OpenGL)

我设计了一个C++类,用于从轨迹球旋转,缩放和平移中抽象出用户.我有旋转(使用轨迹球)和缩放按预期工作.但是,平移不会像预期的那样运行.当我选择一个点并拖动时,我希望在完成拖动时,拾取的点继续在鼠标下方.我对透视投影中的平移的理解如下.目标和摄像机位置都将受到平移操作的影响.摄像机目标和摄像机位置(眼睛)应与阻力成比例平移.比例(可能不是常数)应该基于z深度.

在正交投影中平移是直接的,但是在视角方面存在问题.如果可以解释OpenGL的数学和实现细节,将会很有用.

c++ opengl renderer

12
推荐指数
1
解决办法
3053
查看次数

使用std :: thread调用重载的成员函数

对于需要使用线程跨越的函数,是否可能存在重载?

我有一个名为Complex的简单类.

class Complex
{
public:
    Complex():realPart_(0), imagPart_(0){}

    Complex(double rp, double ip) : realPart_(rp), imagPart_(ip) {}

    double & real() { return realPart_;}
    double & imag() { return imagPart_;}

    const double & real() const { return realPart_;}
    const double & imag() const { return imagPart_;}

    double square() const {return realPart_*realPart_ - imagPart_*imagPart_;}

    void display() const
    {
        std::cout << "Square of the Complex number (" << realPart_ << ") + i (" << imagPart_ << " ) is " << square() << …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 stdthread visual-studio-2012

11
推荐指数
3
解决办法
6757
查看次数

C++中的太空船比较运算符

为什么我们在C++中需要这样的运算符?它在现代C++编程中有何用处?任何可以应用它的真实代码示例都会有所帮助.

这个问题旨在了解现实世界中的实际应用,而无需阅读Herb Sutter的罗嗦提议.尽管如此,对提案没有冒犯.

c++ spaceship-operator c++20

10
推荐指数
1
解决办法
3735
查看次数

static_assert用于确保设计合同

作为开发人员团队的一员,我想确保在我们发布的自定义迭代器上实现一组函数(和运算符).使用STL迭代器类型作为基本类型有帮助,但是由于某些原因(在我的控制范围之外),我们决定不强制执行STL兼容性.迭代器由同一团队和整个公司的人员使用.

我想设计一个消耗迭代器类型的模板类,并根据设计合同进行测试.

例如,我希望迭代器实现一个operator ++,operator--并声明所需的typedef.

1>是否可以实现强制设计合同的模板类?可能使用static_assert?

2>如果是,这是一个好的设计吗?

reference:自定义迭代器

c++ iterator

9
推荐指数
1
解决办法
2893
查看次数

D编程:组件边界处的接口

C++在很大程度上依赖于C风格来导出和导入函数(如果有的话,不是类/接口),从而失去了面向对象的风格,这在许多方面使得导出的界面变得神秘.

可以使用D编程语言以面向对象的方式导出接口.我可以用D接口包装C++(纯)类吗?有哪些可能要考虑的因素?这种方法是否可行.

c++ d interface

6
推荐指数
1
解决办法
636
查看次数

粒子动力学

我正在3D空间中建模一个粒子.

粒子插值

{0}粒子在时间t0从具有速度V0的已知位置P0开始.使用其在t-1处的已知先前P-1位置来计算速度.

{1}粒子的目标是在t1以P1的已知速度进入P1.

{..}粒子尽可能快地移动,没有抖动(C1连续)由一组约束限制,这些约束独立地沿x,y和z钳制加速度.沿x,y和z的最大加速度/减速度是已知的,并且是Xa,Ya和Za.沿x,y和z的最大加速度变化率由Xr,Yr和Zr定义.

{n}在未知的时间步长之后,它在某个时间(比如tn)以速度Vn到达Pn.

{n + 1}它在tn + 1处移动到Pn + 1.

我的问题是计算从P0到Pn的转换的最小时间并产生其中间位置和速度方向.第二个目标是平滑加速,而不是应用加速度导致混乱.

目前的方法:

  1. 找到从开始P0到结束Pn最长对齐的维度{x,y或z}.这将是关键维度,并将决定总时间.这是相当简单的,我可以写一些这样的效果.

  2. 在所有维度中平滑地插入而没有从P0到Pn的抖动,使得Pn处的速度如预期的那样.我不确定,如何处理这个问题.

任何已经执行此操作的输入/物理引擎都将非常有用.这是一个商业项目,我不能依赖具有限制性许可的大型第三方库.

注意:P0和Pn处的粒子几乎没有加速度.

algorithm game-physics

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

std :: thread Visual Studio 2012警告

我试图了解如何使用Visual Studio 2012使用新的std :: thread.我正在尝试编译以下代码.

#include <iostream>
#include <thread>

class scoped_thread
{
    std::thread t_;

public:

    explicit scoped_thread(std::thread & t): t_(std::move(t))
    {
        if(!t_.joinable())throw std::logic_error("No thread");
    }

    ~scoped_thread()
    {
        t_.join();
    }

private:

    scoped_thread(scoped_thread const &);
    scoped_thread & operator=(scoped_thread const &);
};

struct local_functor
{
    int& i_;

    local_functor(int & i):i_(i){}

    void operator()()
    {
        while(i_ < 1e5)i_++;        
    }
};

// can potentially throw exceptions
void callAnotherFunc()
{
    std::cout << "this function can throw an exception" << std::endl;   
    // try (un)commenting the line below and …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ c++11 stdthread visual-studio-2012

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