我想创建一个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)
那可能吗?如果是的话,我怎么能意识到这一点?
当我使用在线工具在1GB到字节之间进行转换时,我会得到不同的答案.例如,使用谷歌转换器:1GB=1e+9而在另一个转换器我得到1GB= 1073741824.我想根据是否1KB=1024B或1KB=1000B(这是谷歌单位)以不同的方式使用该单位.
如何使用小型C程序或功能知道我的机器使用哪个单元?C有宏吗?我想这样做,因为我的程序可能会通过各种操作系统运行.
在为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)
从编译器资源管理器中可以看出,Clang给出了此代码的错误。如果= nullptr删除,则两个编译器都将运行而不会出现错误。
显然,该代码不会执行任何操作,即使执行了此操作也没= nullptr必要。不过我很好奇,关于标准中是否有任何说明这种情况下的一个或多个编译器正确的?
我正在使用CUDA,我试图阻止我的内核工作(即终止所有正在运行的线程)在某个if块被命中后.我怎样才能做到这一点?我真的被困在这里.
我有一个与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所有值的值初始化这些数组呢?
我发现这种结构在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()
我有一个用一些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) 我对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) 我有以下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) 我想为具有模板作为参数的方法签名创建函数指针
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) 我的作业中有一个很奇怪的问题。所以我必须构建一个计算两个数字的和/差的函数。
这看起来相当简单,但有一个问题。
这是函数:
void sumdif()
{
int result = 0;
//input
//output
}
Run Code Online (Sandbox Code Playgroud)
我不能使用任何分号,这就是函数的外观。
输入包含:数字、+ 或 -(取决于您要减去还是添加)和另一个数字。
该函数将输出结果。
如果我可以使用分号,那就很容易了。不过,我不知道在这种情况下如何解决这个问题。
我考虑过使用三元运算符。不幸的是,我不知道如何在一行中获取输入、输出以及区分 + 和 - 。(我想我无论如何都需要“;”,所以它对我没有帮助)。
这是问题: https://www.pbinfo.ro/?pagina =probleme&id=3191
不幸的是,它是罗马尼亚语的。您可以使用谷歌翻译了解更多详细信息,但我已经解释了这个想法。
通过该函数,您可以获取输入,然后输出结果,除此之外,您不能使用任何分号。(这对我来说是最难的部分 - 我以前从未处理过这个)
如何解决这个问题呢?