小编use*_*470的帖子

Git:获取工作树当前状态的哈希值?

我想确保我的可执行文件是使用最新版本的代码构建的.

例如,我可以在编译时获取当前的git commit并将其烘焙到可执行文件中; 然后,当运行可执行文件时,它会将其与当前的git提交进行比较,如果它们不匹配,则会抱怨代码已被修改并且已过期.

但是,在对代码进行少量更改后,有时我会在不进行提交的情况下重新编译.然后此方法不起作用,因为它只考虑已提交的更改.

是否有任何方便的方法以编程方式获取当前提交的哈希PLUS工作目录的状态,使用git或其他方式?

此外,这种做法有名称吗?

git version-control

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

如何防止函数参数以错误的顺序传递?

假设我有一个 C++ 函数,如下所示:

double myfunction(double a, double b) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

然后我这样称呼它:

double a = 1.0;
double b = 2.0;
double good_r = myfunction(a, b);
double bad_r = myfunction(b, a); // compiles fine
Run Code Online (Sandbox Code Playgroud)

我想确保a并且b永远不会以错误的顺序提供。在 C++ 中确保这一点的最佳方法是什么?

其他语言允许命名参数,如下所示:

double good_r = myfunction(a=a, b=b);
double bad_r = myfunction(a=b, b=a); // mistake immediately obvious
double bad_r = myfunction(b=b, a=a); // compiles fine
Run Code Online (Sandbox Code Playgroud)

或者也许可以使用类型部分解决问题,即

double my_type_safe_function(a_type a, b_type b) {
    // do something
}
a_type a = 1.0; …
Run Code Online (Sandbox Code Playgroud)

c++ types arguments named-parameters

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

C++中的元素操作

是否有一个预先存在的库,可以让我创建具有以下属性的类似数组的对象:

  1. 运行时间大小规范(在即时选择,之后不增长或缩小)
  2. 算重载执行元素方式操作(即c=a+b会导致在载体中cc[i]=a[i]+b[i]所有i,并且类似地为*,-,/,等等)
  3. 例如,x=sqrt(vec)元素行为的一组好的函数将具有元素x[i]=sqrt(vec[i])
  4. 提供"总结"的功能,例如sum(vec),mean(vec)
  5. (可选)可以将操作发送到GPU进行处理.

基本上类似于数组在Fortran中的工作方式,隐藏了所有实现.目前我正在使用vectorSTL并手动重载运算符,但我觉得这可能是一个已解决的问题.

c++ arrays fortran gpu vector

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

朱莉娅的静态数组?

我有多次调用的函数,需要临时数组.每次调用函数时都不会发生数组分配,我希望临时分配一次.

如何在Julia中创建一个静态分配的数组,具有函数范围?

arrays performance static allocation julia

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

如何从另一个命名空间中显式地专门化一个函数模板?

出于可读性原因,我想专门化一个接近在命名空间内声明的类的定义的函数模板:

#include <iostream>

template<typename T> void my_function() {
    std::cout << "my_function default" << std::endl;
}

namespace Nested {
    class A {};
    template<> void my_function<A>() {
        std::cout << "my_function specialization for A" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用上面的代码,我从 clang++ 4.0 得到以下错误:

 error: no function template matches function template specialization 'my_function'
Run Code Online (Sandbox Code Playgroud)

这似乎是一个命名空间问题。我怎样才能使上述工作(不将模板函数专业化移出Nested命名空间)?

编辑:我也尝试添加::my_function专业化:

test.cpp: error: definition or redeclaration of 'my_function' cannot name the global scope
        template<> void ::my_function<A>() {
                        ~~^
Run Code Online (Sandbox Code Playgroud)

c++ templates namespaces template-specialization explicit-specialization

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