我想确保我的可执行文件是使用最新版本的代码构建的.
例如,我可以在编译时获取当前的git commit并将其烘焙到可执行文件中; 然后,当运行可执行文件时,它会将其与当前的git提交进行比较,如果它们不匹配,则会抱怨代码已被修改并且已过期.
但是,在对代码进行少量更改后,有时我会在不进行提交的情况下重新编译.然后此方法不起作用,因为它只考虑已提交的更改.
是否有任何方便的方法以编程方式获取当前提交的哈希PLUS工作目录的状态,使用git或其他方式?
此外,这种做法有名称吗?
假设我有一个 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=a+b
会导致在载体中c
与c[i]=a[i]+b[i]
所有i
,并且类似地为*
,-
,/
,等等)x=sqrt(vec)
元素行为的一组好的函数将具有元素x[i]=sqrt(vec[i])
sum(vec)
,mean(vec)
等基本上类似于数组在Fortran中的工作方式,隐藏了所有实现.目前我正在使用vector
STL并手动重载运算符,但我觉得这可能是一个已解决的问题.
我有多次调用的函数,需要临时数组.每次调用函数时都不会发生数组分配,我希望临时分配一次.
如何在Julia中创建一个静态分配的数组,具有函数范围?
出于可读性原因,我想专门化一个接近在命名空间内声明的类的定义的函数模板:
#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
c++ ×3
arrays ×2
allocation ×1
arguments ×1
fortran ×1
git ×1
gpu ×1
julia ×1
namespaces ×1
performance ×1
static ×1
templates ×1
types ×1
vector ×1