小编Rak*_*111的帖子

模板类中的模板函数

我有这个代码:

template <class T>
class MyClass {
    public:
        template <class U>
        void foo() {
            U a;
            a.invoke();
        }
};
Run Code Online (Sandbox Code Playgroud)

我希望它以这种形式:

template <class T>
class MyClass {
    public:
        template <class U>
        void foo();
};

template <class T> /* ????? */
void MyClass<T>::foo() {
    U a;
    a.invoke();
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?什么是正确的语法?

c++ templates

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

检测stdin是终端还是管道?

当我python从没有参数的终端执行" "时,它会启动Python交互式shell.

当我cat | python从终端执行" "时,它不会启动交互模式.不知何故,没有得到任何输入,它已检测到它已连接到管道.

我如何在C或C++或Qt中进行类似的检测?

c c++ qt stdin pipe

108
推荐指数
4
解决办法
3万
查看次数

如何在派生类构造函数中初始化基类成员变量?

为什么我不能这样做?

class A
{
public:
    int a, b;
};

class B : public A
{
    B() : A(), a(0), b(0)
    {
    }

};
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

107
推荐指数
3
解决办法
12万
查看次数

如何简洁,便携,彻底地播种mt19937 PRNG?

我似乎看到很多答案,有人建议使用它<random>来生成随机数,通常伴随着这样的代码:

std::random_device rd;  
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 5);
dis(gen);
Run Code Online (Sandbox Code Playgroud)

通常这会取代某种"邪恶的憎恶",例如:

srand(time(NULL));
rand()%6;
Run Code Online (Sandbox Code Playgroud)

我们可能会批评旧的方式,认为time(NULL)提供低熵,time(NULL)可预测,最终结果是不均匀的.

但所有这一切都适用于新的方式:它只有一个更光亮的贴面.

  • rd()返回一个unsigned int.这至少有16位,可能是32位.这还不足以为MT的19937位状态提供种子.

  • 使用std::mt19937 gen(rd());gen()(以32位播种并查看第一个输出)不能提供良好的输出分布.7和13永远不会是第一个输出.两粒种子产生0.十二粒种子产生1226181350.(链接)

  • std::random_device可以(有时是)实现为具有固定种子的简单PRNG.因此,它可能在每次运行时产生相同的序列.(链接)这甚至比time(NULL).

更糟糕的是,尽管存在它们包含的问题,但复制和粘贴上述代码片段非常容易.对此的一些解决方案需要获得可能不适合每个人的大型 .

鉴于此,我的问题是如何在C++中简洁,便携,彻底地播种mt19937 PRNG?

鉴于上述问题,一个很好的答案:

  • 必须完全播种mt19937/mt19937_64.
  • 不能单独依赖std::random_devicetime(NULL)作为熵的来源.
  • 不应该依赖Boost或其他图书馆.
  • 应该适合少量的线条,这样看起来很好,可以复制粘贴到答案中.

思考

  • 我目前的想法是,输出来自std::random_device(可能通过XOR)time(NULL),从地址空间随机化得到的值,以及硬编码常量(可以在分配期间设置)以获得熵的最佳努力.

  • std::random_device::entropy() 没有很好地说明std::random_device可能做什么或不做什么.

c++ random c++11

106
推荐指数
4
解决办法
7189
查看次数

应该添加浮点数以获得最精确的结果?

这是我在最近的采访中被问到的一个问题,我想知道(我实际上并不记得数值分析的理论,所以请帮助我:)

如果我们有一些累积浮点数的函数:

std::accumulate(v.begin(), v.end(), 0.0);
Run Code Online (Sandbox Code Playgroud)

vstd::vector<float>例如,是一个.

  • 在累积它们之前对这些数字进行排序会更好吗?

  • 哪个订单会给出最准确的答案?

我怀疑按升序排序数字实际上会减少数值误差,但不幸的是我无法证明这一点.

PS我确实意识到这可能与现实世界的编程无关,只是好奇.

c++ floating-point precision

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

如何使用gcc/g ++在Linux上编译Windows?

我在Linux上使用freeglut用C++(g ++)编写了一些效果,然后用它编译它们

g++ -Wall -lglut part8.cpp -o part8
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有可能让g ++制作包含所需内容的静态编译Windows可执行文件?

我没有Windows,所以如果我能在Linux上做到这一点真的很酷:)

c++ opengl gcc glut freeglut

101
推荐指数
6
解决办法
15万
查看次数

如何在类中初始化const成员变量?

#include <iostream>

using namespace std;
class T1
{
  const int t = 100;
  public:

  T1()
  {

    cout << "T1 constructor: " << t << endl;
  }
};
Run Code Online (Sandbox Code Playgroud)

当我尝试t用100. 初始化const成员变量时,但是它给了我以下错误:

test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
Run Code Online (Sandbox Code Playgroud)

如何初始化const值?

c++ const

97
推荐指数
6
解决办法
25万
查看次数

Visual Studio项目中的*.VC.db文件是什么?

在我的一些Visual Studio 2015项目*.VC.db中,项目文件夹中有一个文件,以项目命名:如果项目名称是FooBar,则文件为FooBar.VC.db.

这个文件看起来像某种数据库,但我在项目中根本没有使用任何数据库.

我最好的猜测是它的运行方式与HelloWorld.sdfIntelliSense使用的数据库类似.

它只是在"新"中是一样的,还是在做一些重要的事情,我不应该删除它?

visual-studio visual-studio-2015

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

为什么lambda的大小为1个字节?

我正在处理C++中一些lambda的记忆,但我对它们的大小感到有些困惑.

这是我的测试代码:

#include <iostream>
#include <string>

int main()
{
  auto f = [](){ return 17; };
  std::cout << f() << std::endl;
  std::cout << &f << std::endl;
  std::cout << sizeof(f) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里运行它:http://fiddle.jyt.io/github/b13f682d1237eb69ebdc60728bb52598

ouptut是:

17
0x7d90ba8f626f
1
Run Code Online (Sandbox Code Playgroud)

这表明我的lambda的大小是1.

  • 这怎么可能?

  • lambda至少应该是指向它的实现的指针吗?

c++ lambda sizeof c++11 c++14

89
推荐指数
5
解决办法
7348
查看次数

在Haskell中编写一个Haskell解释器

一个经典的编程练习是在Lisp/Scheme中编写一个Lisp/Scheme解释器.可以利用完整语言的强大功能为该语言的子集生成解释器.

Haskell有类似的练习吗?我想使用Haskell作为引擎来实现Haskell的子集.当然可以做到,但有没有可供查看的在线资源?


这是背景故事.

我正在探索使用Haskell作为一种语言来探索我正在教授的离散结构课程中的一些概念的想法.在这个学期,我已经选择了Miranda,这是一种激发Haskell的小语言.米兰达做了我想做的事情的90%左右,但哈斯克尔做了大约2000%.:)

所以我的想法是创建一种具有Haskell功能的语言,我希望并禁止其他所有功能.随着学生的进步,我可以在掌握了基础知识后有选择地"开启"各种功能.

教学"语言水平"已成功用于教授JavaScheme.通过限制他们可以做的事情,你可以防止他们在掌握你想要教授的语法和概念的同时在脚中射击.并且您可以提供更好的错误消息.

interpreter haskell functional-programming

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