小编Dav*_*aro的帖子

在地图中存储具有不同签名的函数

我想创建一个map具有 string关键和通用的方法,value在C++中,但我不知道这甚至有可能.我想做那样的事情:

void foo(int x, int y)
{
   //do something
}

void bar(std::string x, int y, int z)
{
   //do something
} 

void main()
{
   std::map<std::string, "Any Method"> map;

   map["foo"] = &foo;      //store the methods in the map
   map["bar"] = &bar;

   map["foo"](1, 2);       //call them with parameters I get at runtime
   map["bar"]("Hello", 1, 2);
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?如果是的话,我怎么能意识到这一点?

c++

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

千兆字节(GB)是多少字节?

当我使用在线工具在1GB到字节之间进行转换时,我会得到不同的答案.例如,使用谷歌转换器:1GB=1e+9而在另一个转换器我得到1GB= 1073741824.我想根据是否1KB=1024B1KB=1000B(这是谷歌单位)以不同的方式使用该单位.

如何使用小型C程序或功能知道我的机器使用哪个单元?C有宏吗?我想这样做,因为我的程序可能会通过各种操作系统运行.

c

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

默认成员值和不完整类型的模板扩展中的编译器差异

在为MSVC和Clang之间具有默认初始化程序的类成员扩展模板时,似乎有所不同,这有时可能导致代码在MSVC中成功编译但在Clang中失败。

有问题的问题代码相当复杂,并且分布在多个文件中,但是我认为以下玩具示例显示出相同的差异:

#include <memory>

class Impl;

class A {
  std::unique_ptr<Impl> ptr = nullptr;
public:
  A();
  ~A();
};

int main() {}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/3s5Drh

从编译器资源管理器中可以看出,Clang给出了此代码的错误。如果= nullptr删除,则两个编译器都将运行而不会出现错误。

显然,该代码不会执行任何操作,即使执行了此操作也没= nullptr必要。不过我很好奇,关于标准中是否有任何说明这种情况下的一个或多个编译器正确的?

c++ compiler-errors language-lawyer

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

如何从主机代码中断或取消CUDA内核

我正在使用CUDA,我试图阻止我的内核工作(即终止所有正在运行的线程)在某个if块被命中后.我怎样才能做到这一点?我真的被困在这里.

c++ cuda gpu nvidia gpu-programming

7
推荐指数
2
解决办法
3649
查看次数

如何使用initializer-list C++初始化数组

我有一个与C++数组和结构相关的问题.我有一个结构:

struct npc_next_best_spot{
    npc_next_best_spot(): x({0}),
                          y({0}),
                          value(-1),
                          k(0),
                          i({0}), 
                          triple_ress({0}),
                          triple_number({0}),
                          bigI(0)
    {}

    int x[3]; 
    int y[3]; 
    double value; 
    int k; 
    int i[3]; 
    int triple_ress[3]; 
    int triple_number[3];
    int bigI;
};
Run Code Online (Sandbox Code Playgroud)

但是这给出了警告

"非类型的list-initializer不能用括号括起来".

那么如何确保使用0所有值的值初始化这些数组呢?

c++ arrays struct initialization

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

为什么将 Thread.currentThread().isInterrupted() 与 try/catch 一起使用

我发现这种结构在Thinking in java的多线程章节中很流行:

public void run(){
    try{
        while(!Thread.currentThread().isInterrupted()){
            // do something blocked like wait(), sleep() or I/O
        }
    }catch(InterruptedExeption e){

    }
}
Run Code Online (Sandbox Code Playgroud)

但是我现在认为 while 循环当且仅当被阻塞或抛出时才会退出wait(),为什么sleep()不使用呢?或者只是因为它是规范的?I/OInterruptedExeptionwhile(true)Thread.currentThread().isInterrupted()

java multithreading

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

列表上的std :: min_element不返回最小值

我有一个用一些s while初始化a 的循环.listdouble

我想输出最小的值,但到目前为止我所做的似乎不起作用,因为我没有得到任何输出.

这是我的代码的相关部分:

    list<double> allDistances;

    std::ifstream infile("ATXTFile.txt");
    while (std::getline(infile, data)) {

        //do some stuff
        //dist are some double values
        allDistances.push_back(dist);
    }

    cout << min_element(allDistances.begin(), allDistances.end()) << endl;

}
Run Code Online (Sandbox Code Playgroud)

c++ list minimum

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

Haskell性能调优

我对Haskell很新,为了更好地学习它,我开始在这里和那里解决问题,我最终得到了这个(项目Euler 34).

145是一个奇怪的数字,为1!+ 4!+ 5!= 1 + 24 + 120 = 145.

求所有数字的总和等于其数字的阶乘>的总和.

注意:为1!= 1和2!= 2不是它们不包括在内的总和.

我写了一个C和一个Haskell蛮力解决方案.

有人可以解释一下,Haskell版本比C实现慢〜15x(~0.450 s vs~6.5s)以及如何调整和加速Haskell解决方案?

unsigned int solve(){
unsigned int result = 0;
unsigned int i=10;
while(i<2540161){
    unsigned int sumOfFacts = 0;
    unsigned int number = i;
    while (number > 0) {
       unsigned int d = number % 10;
        number /= 10;
        sumOfFacts += factorial(d);
    }

    if (sumOfFacts == i)
        result += i;

    i++;
 }
 return result;
}
Run Code Online (Sandbox Code Playgroud)

这里是haskell解决方案

--BRUTE FORCE SOLUTION
solve:: …
Run Code Online (Sandbox Code Playgroud)

performance haskell

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

将右值绑定到左值引用

我有以下C ++代码(VS2013):

#include <iostream>
using namespace std;

class A {
    int i;
public:
    A(int i) : i(i) {
        cout << "Constructor: " << i << endl;
    }
    A(const A &o) : i(o.i) {
        cout << "Copy constructor: " << i << endl;
    }
    ~A() {
        cout << "Destructor: " << i << endl;
    }
};

A test(const A &a, A b, A *c) {
    return *c;
}

int main() {
    A b(10);
    cout << "START OF TEST" << endl;
    test(1, …
Run Code Online (Sandbox Code Playgroud)

c++ constructor type-conversion copy-constructor

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

具有模板参数的typedef函数指针

我想为具有模板作为参数的方法签名创建函数指针

Template<class T>
typedef int (*computeSizeFunc)(T data);
Run Code Online (Sandbox Code Playgroud)

我试过了,这是错误

 error: template declaration of 'typedef'
 typedef  int (*computeSizeFunc)(T data).
Run Code Online (Sandbox Code Playgroud)

这是我尝试为其编写函数指针的方法签名

template<class T>
int getSize (T data)
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

编写一个不使用分号的函数

我的作业中有一个很奇怪的问题。所以我必须构建一个计算两个数字的和/差的函数。

这看起来相当简单,但有一个问题。

这是函数:

void sumdif()
{
int result = 0;
//input
//output
}
Run Code Online (Sandbox Code Playgroud)

我不能使用任何分号,这就是函数的外观。

输入包含:数字、+ 或 -(取决于您要减去还是添加)和另一个数字。

该函数将输出结果。

如果我可以使用分号,那就很容易了。不过,我不知道在这种情况下如何解决这个问题。

我考虑过使用三元运算符。不幸的是,我不知道如何在一行中获取输入、输出以及区分 + 和 - 。(我想我无论如何都需要“;”,所以它对我没有帮助)。

这是问题: https://www.pbinfo.ro/?pagina =probleme&id=3191

不幸的是,它是罗马尼亚语的。您可以使用谷歌翻译了解更多详细信息,但我已经解释了这个想法。

通过该函数,您可以获取输入,然后输出结果,除此之外,您不能使用任何分号。(这对我来说是最难的部分 - 我以前从未处理过这个)

如何解决这个问题呢?

c++ algorithm

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