小编Sti*_*ert的帖子

C++ 11 std :: to_string(double) - 没有尾随零

今天我尝试了一些C++ 11 STL的新功能并遇到过std::to_string.

可爱,可爱的功能集.为一个双字符串到字符串的转换创建一个stringstream对象对我来说似乎太过分了,所以我很高兴我们现在能做到这样的事情:

std::cout << std::to_string(0.33) << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果?

0.330000
Run Code Online (Sandbox Code Playgroud)

我并不完全满足于此.有没有办法告诉你std::to_string留下尾随的零?我搜索了互联网,但据我所知,该函数只需要一个参数(要转换的值).回到使用stringstreams的'过去',您可以设置流的宽度,但我宁愿不转换回来.

任何人在解决之前遇到过这个问题?一些StackOverflow搜索没有产生任何结果.

(C++ 11 STL参考:http://en.cppreference.com/w/cpp/string/basic_string/to_string)

c++ stl c++11

56
推荐指数
5
解决办法
4万
查看次数

将每个类型包装在模板化类中的可变参数模板中

给定一个可变参数模板Types...,我想存储A<>包中的每个类型.这可以在一个元组中完成A<>,但我需要以编程方式派生出所述元组的类型.

在c ++ 11/14/17中这样的事情是否可能?

template <class T> class A { };

template <class... Types>
class B
{
   // A tuple of A<>'s for each type in Types...
   std::tuple<A<Type1>, A<Type2>, ...> data;
};
Run Code Online (Sandbox Code Playgroud)

c++ templates tuples variadic-templates c++11

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

GLSL | 广告牌着色器,保持缩放

我在互联网上搜索了教程,实现和帮助.没有.

我唯一能找到的是广告牌着色器实现,它将mat4的左上角3x3矩阵设置为identity.这确实会丢弃旋转,但也有效地缩放.

有没有办法进行不丢弃(非均匀)缩放的广告牌?

注意:我不是在寻找任何人为我编程.只是我不能围绕具体细节.任何指向正确的方向都是受欢迎的.

opengl math glsl

7
推荐指数
1
解决办法
1763
查看次数

使c ++类"显示"的最佳实践(字符串,ostream)

我有一个值语义类,我希望在与Haskells Show类相同的意义上"可显示" ,或者Python提供通用__str__()函数.

在c ++中:

  • 我可以重载,operator<<(ostream&, ...)所以我可以输出我的类,例如cout
  • 我可以重载,operator std::string()所以我的类转换为std :: string
  • 我可以重载,operator const char*()所以我的类转换为const char*.
  • 我可以写一个str()成员,或一个to_string(...)免费的功能

这些功能中的每一个都可以根据另一个来定义.一种选择比其他选择更好吗?这些都是选择吗?鉴于c ++ 11/14/17,最优雅的方法是什么?

c++ c++11 c++14

7
推荐指数
1
解决办法
330
查看次数

当面片大小 &gt; 4 时,曲面细分如何知道面中哪些顶点属于一起?

当不使用曲面细分着色器时,您可以传递基元类型(GL_TRIANGLESGL_TRIANGLE_STRIP等),让 OpenGL 知道顶点流如何表示几何面。

使用曲面细分着色器GL_PATCHES替换这些原始类型枚举。当处理大小为 3 或 4 的面片并将 TES 中的相应布局设置为三角形或四边形时,这在我的脑海中是有意义的。

但是如果我有一个大小为 16 的面片(有些教程这样做),TPG 如何知道哪些 3 或 4 个顶点形成哪些面?我已经多次读到,顶点缓冲区中的顺序在GL_PATCHES使用时并不重要,但肯定存在一个点,其中一组特定的 3 个顶点被视为三角形(传递给例如几何着色器)。这是如何决定的?

opengl

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

传递多态unique_ptr作为参数时内存泄漏

编辑:读取此问题以供将来使用的任何人:错误与unique_ptr无关.简单地说,正如JoergB在他的回答中所说的那样,我错误地忘记了基类的虚拟析构函数.


在偶然的运行时崩溃之后,我发现我的代码遭遇了严重的内存泄漏问题.我用Valgrind运行我的程序,医生似乎同意:字节肯定丢失了.但是我不能为我的生活找出它出错的地方.

我设法将这些泄漏发生在这三行中:

std::unique_ptr<Operator> pointer(new Operator{"left", "right"});
NodeSpace space; // The node space takes ownership over the operator

// When I comment out the following line, Valgrind reports nothing:
space.setNode("key", move(pointer));
Run Code Online (Sandbox Code Playgroud)

在第一行unique_pointer中创建a,持有Operator该类的实例.该Operator内部看起来是这样的:

class Operator : public Node {
public:
    Operator(std::initializer_list<std::string> input_keys) {
        input_nodes_.reserve(input_keys.size());
        for_each(begin(input_keys), end(input_keys), [this](const string& key) {
            input_nodes_[key] = nullptr;
        });
    }

    // ...

private:
    std::unordered_map<std::string, Node*> input_nodes_;
};
Run Code Online (Sandbox Code Playgroud)

我将unique_ptrr值引用传递给以下函数:

void NodeSpace::setNode(const std::string& key, std::unique_ptr<Node> node);
Run Code Online (Sandbox Code Playgroud)

因为节点空间接管传入节点的所有权,所以它需要一个 …

c++ polymorphism memory-leaks c++11

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