我遇到了一些编译的C代码,但我不明白为什么.具体来说,我有一个C库,它有很多使用这种格式的代码:
void get_xu_col(int i_start,
int n,
double x[n],
int n_x,
int n_u,
int n_col,
double xu_col[n_col][n_x + n_u]){
...
}
int main(){
...
double xu_col[n_col][n_x + n_u];
get_xu_col( ..., xu_col );
...
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是编译器允许在数组中调整大小的原因.据我所知,尺寸必须固定(例如xu_col[9][7])或未定义(例如xu_col[][]).在上面的代码中,似乎大小不是编译时常量.
编译器是否只是忽略了这里的参数?或者它是否真的在维度上进行编译时检查?
如果是后者,那么分别传递尺寸似乎容易出错.
问题的第二部分是:
为什么相同的版本在C++中不起作用?当我从字面上文件扩展名从改变.c到.cpp,并尝试重新编译,我得到
candidate function not viable: no known conversion from 'double [n_col][n_x + n_u]' to 'double (*)[n_x + n_u]' for 7th argument
void get_xu_col(int i_start, int n, double x[n], int n_x, int n_u, int n_col, double …Run Code Online (Sandbox Code Playgroud) 我了解当我调用诸如
a(b(),c());
Run Code Online (Sandbox Code Playgroud)
那么就可以在<= C ++ 14中未定义其行为,而在> = C ++ 17中未指定其行为,这是由编译器确定是求值b还是c首先求值。
我想知道强制执行评估命令的最佳方法。我将编译为C ++ 14。
立即想到的是这样的事情:
#include <iostream>
int count = 5;
auto increment(){
return count++;
}
template <typename A, typename B>
auto diff(A && a, B && b){
return a - b;
}
int main() {
auto && a = increment();
auto && b = increment();
auto c = diff(a,b);
}
Run Code Online (Sandbox Code Playgroud)
我处于不确定的行为状态吗?或者这是如何“强制”执行评估命令的?
我正在寻找一种从bitbucket下载文件的方法(不是存储库,而是来自下载部分的文件)。当前,可以使用部署密钥来克隆存储库,但是我无法使其用于下载。
我尝试了以下方法:
curl -u username: --key .ssh/id_rsa --pubkey .ssh/id_rsa.pub scp://bitbucket.org/repositoryowner/downloads/downloadfile.zip
编辑:
当前最好的解决方法是创建一个一次性虚拟用户:
wget -O /tmp/file --user "username" --password "password" https://bitbucket.org/owner/rep/downloads/abc.tar.gz
我不喜欢 Visual Studio 多光标选项,我从不使用它们。
不可避免地,我幻象按下了一些组合键,打开了一个多光标选项,然后我写了一些代码,然后代码被销毁了。请告诉我如何在 Visual Studio Code 中完全禁用所有此类功能。我在 Ubuntu 上运行,但也对如何在 Windows 上完成此操作感兴趣(如果有任何区别)。
我应该提到,这在 Ubuntu 上每 5 分钟发生一次,但在 Windows 中发生的频率要低得多(例如每小时一次)。
我有一个Github项目,我为项目github.com/jeti/matrix设置了一个"Github页面"网站,以便在这里访问它jeti.github.io/matrix/.
这一切都可以通过Github进行配置.
现在,我想添加我个人网站的子域名,以便可以通过matrix.jeti.io我的网站的子域访问该网站jeti.io.
我真的很困惑如何做到这一点,因为文档似乎没有显示如何将项目页面重定向到子域.我已经尝试了一些我认为应该是正确输入的排列,但由于这些DNS更改需要很长时间才能传播,因此很难进行测试.
具体来说,我想知道作为自定义域输入Github的值是什么(在我看来,这应该只是子域matrix.jeti.io,但我不确定,所以我把它留空了):
然后我还需要创建子域.我通过OVH购买了域名,它们提供了一些添加DNS条目的选项:
我的理解是我需要添加2个顶点记录.我已经这样做了:
我不清楚的是我是否还需要添加CNAME条目.当我尝试添加CNAME条目时,这就是表单的样子:
所以回顾一下:
Custom Domain在Github网站上指定.请告诉我需要更改哪些步骤以及如何修改它们.
对于我的问题,我可以用using两种方式使用该指令.他们基本上归结为这些选择:
template<typename U>
struct A {
private:
// Define our types
using WrapperType = Wrapper<U>;
public:
U *operator()(U *g) const {
// TODO: use WrapperType
}
};
Run Code Online (Sandbox Code Playgroud)
要么:
struct B {
template <typename U>
U *operator()(U *g) const {
// Define the types here instead.
using WrapperType = Wrapper<U>;
// TODO: use WrapperType
}
};
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,都会有其他类模板参数.所以B仍然会有模板参数,即使它在这个简化的例子中看起来不像它.
我的问题是:
在本地定义类型是否有任何开销B?(比较时A)?
我不清楚类型声明如何影响生成的代码.代码必须实时运行,这将是代码库的核心.因此,如果有任何开销,我不能使用B.
话虽这么说,B在我们的例子中是优选的,因为我理想地想用各种类型调用这个代码.是的,这确实需要在课堂上.我刚刚简化了这个例子.
我已经为Android编译了一些静态和共享库.具体来说,我有图书馆
libcoinblas.a libcoinlapack.a libcoinmetis.a libcoinmumps.a libipopt.a
libcoinblas.so libcoinlapack.so libcoinmetis.so libcoinmumps.so libipopt.so
Run Code Online (Sandbox Code Playgroud)
此外,这些库是相互依赖的,即
Lapack requires Blas
Mumps requires Blas and Metis
Ipopt requires Mumps, Metis, and Lapack
Run Code Online (Sandbox Code Playgroud)
使用共享库时,Android项目正确链接和运行,但无法使用静态库构建.
在共享的情况下,我使用的是cmake文件
cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
SHARED
src/main/cpp/cpp_example.cpp
src/main/cpp/MyNLP.cpp)
# Add dependent libraries
add_library(blas SHARED IMPORTED)
set_property(TARGET blas PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcoinblas.so)
add_library(lapack SHARED IMPORTED)
set_property(TARGET lapack PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcoinlapack.so)
add_library(metis SHARED IMPORTED)
set_property(TARGET metis PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcoinmetis.so)
add_library(mumps SHARED IMPORTED)
set_property(TARGET mumps PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcoinmumps.so)
add_library(ipopt SHARED IMPORTED)
set_property(TARGET ipopt PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libipopt.so)
# …Run Code Online (Sandbox Code Playgroud) 我的理解是,uint8_t从a 中读取stringstream是一个问题,因为stringstream它将把它解释uint8_t为a char.我想知道如何uint8_t从stringstream一个数字类型中读取a .例如,以下代码:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
uint8_t ui;
std::stringstream ss("46");
ss >> ui;
cout << unsigned(ui);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印出来52.我想打印出来46.
编辑:另一种做法只是读取string距离stringstream,然后转换解决方案uint8_t,但是这打破了很好的链接属性.例如,在我必须编写的实际代码中,我经常需要这样的东西:
void foobar(std::istream & istream){
uint8_t a,b,c;
istream >> a >> b >> c;
// TODO...
}
Run Code Online (Sandbox Code Playgroud) 在C++ 11中,我需要递归地调用一个函数0,...,n(其中n是编译时常量).这是问题的结构,似乎存在致命缺陷:
#include "Eigen/Dense"
template<size_t i>
struct Int {
};
template<size_t d, typename C, typename X>
constexpr X eval(const C &c, const X &x, const Int<d> &, const Int<C::SizeAtCompileTime - 1 - d> &) {
return 1;
}
template<size_t d, typename C, typename X, size_t i>
constexpr X eval(const C &c, const X &x, const Int<d> &, const Int<i> &) {
return x * eval(c, x, Int<d>(), Int<i + 1>());
}
int main() {
const size_t …Run Code Online (Sandbox Code Playgroud) 我使用新的camera2 api体验了低FPS率.具体来说,尽管选择了最高的FPS范围(30,30)
characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
Run Code Online (Sandbox Code Playgroud)
并设置它
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, bestFPSRange);
Run Code Online (Sandbox Code Playgroud)
在我测试过的两款设备(三星S5和Xperia Z3 Compact)上,我获得了高图像分辨率的平均速率.以下是我设置的方法OnImageAvailableListener:
int format = ImageFormat.YUV_420_888;
Size largest = map.getOutputSizes(format)[0];
Log.d("Images", "sizes: " + Arrays.toString(map.getOutputSizes(format)));
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), format,
/* maxImages */50);
mImageReader.setOnImageAvailableListener(new OnImageAvailableListener() {
private int frames = 0;
private long initialTime = SystemClock.elapsedRealtimeNanos();
@Override
public void onImageAvailable(ImageReader reader) {
reader.acquireLatestImage().close();
frames++;
if ((frames % 30) == 0) {
long currentTime = SystemClock.elapsedRealtimeNanos();
long fps = Math.round(frames * 1e9 / (currentTime - initialTime));
Log.d("Image", "frame# : " + frames …Run Code Online (Sandbox Code Playgroud) c++ ×6
android ×2
android-ndk ×1
bitbucket ×1
c ×1
c++11 ×1
c++14 ×1
cmake ×1
cname ×1
curl ×1
eigen ×1
eigen3 ×1
git ×1
github-pages ×1
optimization ×1
subdomain ×1
templates ×1
type-alias ×1
wget ×1