小编Pic*_*ent的帖子

带有数据存储库的C++ Bazel项目

我有一个(基本的)C++项目:

??? bin
?   ??? BUILD
?   ??? example.cpp
??? data
?   ??? someData.txt
??? WORKSPACE
Run Code Online (Sandbox Code Playgroud)

可执行example.cpp使用data/目录中的一些数据文件:

#include <fstream>
#include <iostream>

int main()
{
  std::ifstream in("data/someData.txt");

  if (!in)
  {
    std::cerr << "Can not open file!";
    return EXIT_FAILURE;
  }

  std::string message;

  if (!(in >> message))
  {
    std::cerr << "Can not read file content!";
    return EXIT_FAILURE;
  }

  std::cout << message << std::endl;

  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我的Bazel设置是最小的:

  • WORKSPACE:空文件
  • bin/BUILD:cc_binary(name = "example",srcs = ["example.cpp"])
  • data/someData.txt:包含该Hello_world! …

c++ bazel

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

在类定义之外使用enable_if的函数实现

所以基本上,我现在有一个非常基本的泛型类,目前正在测试type_traits头.我目前正在尝试使用某些类型的函数,即现在的算术类型.

#include <type_traits>

template <typename T> class Test {
    public:
        template <typename U = T> 
        typename std::enable_if<std::is_arithmetic<U>::value>::type print();
}; 
Run Code Online (Sandbox Code Playgroud)

该函数完美地工作,仅适用于算术类型.

但我喜欢保持我的课程整洁,只让他们有原型,而功能实现在课堂之外.

使用标准模板即

void test();

template <typename T> void Test<T>::test() {}
Run Code Online (Sandbox Code Playgroud)

它很简单,我知道如何,但我不知道如何用" std::enable_if" 声明类外的实现,并且我在编译过程中的每一次尝试都说原型与类中的任何一个都不匹配.

我设法在这里找到了一个类似的问题,但那里的课程是标准的而不是通用的.

PS.我使用MinGW-w64和-std = c ++ 17

c++ templates sfinae type-traits c++17

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

关于使用Julia&Base.Test的正确方法:即使有些测试失败,也要运行所有测试

使用Base.Test我的单元测试,我被立即退出第一次测试失败后立即感到惊讶。

让我们考虑一下这个runtest.jl文件:

using Base.Test

@testset "First" begin
    # test fails
    @test false
end;

@testset "Second" begin
    # never run... 
    @test true 
end;
Run Code Online (Sandbox Code Playgroud)

的输出julia runtest.jl始终为(永远不会运行第二个测试):

First: Test Failed
  Expression: false
Stacktrace:
 [1] macro expansion at /home/picaud/Temp/runtests.jl:14 [inlined]
 [2] macro expansion at ./test.jl:860 [inlined]
 [3] anonymous at ./<missing>:?
Test Summary: | Fail  Total
First         |    1      1
ERROR: LoadError: Some tests did not pass: 0 passed, 1 failed, 0 errored, 0 broken.
Run Code Online (Sandbox Code Playgroud)

我的问题:即使某些测试失败,如何运行并报告所有测试结果?

unit-testing julia

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

“outer”关键字,Julia for 循环变量作用域

我想使用 for 循环来实现迭代方法。在循环结束时,我还想检查是否max_iter达到:

function iterative_method()

    iter_max = 10

    for iter in 1:iter_max 
        # some computations
        # ...
        # if converged 
        #    break
        # end
    end

    @assert iter!=iter_max "max iteration = $iter_max reached!"

end
Run Code Online (Sandbox Code Playgroud)

不幸的是,@assert无法正常工作iter

julia> iterative_method()
ERROR: UndefVarError: iter not defined
Run Code Online (Sandbox Code Playgroud)

问题:如何使iterfor循环块外可见?

for-loop julia

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

Bazel&自动生成cpp/hpp文件

我开始使用Bazel作为我的C++项目构建系统.

但是我遇到了以下问题:

我正处于自动生成file.hpp file.cpp(文字编程)的场景中.

要重现我的问题,可以简单地使用这个最小的生成器:

-- file.sh --
#!/bin/sh
echo "int foo();" >> file.hpp
echo "#include \"myLib/file.hpp\"\n\nint foo() { return 2017; }" >> file.cpp
Run Code Online (Sandbox Code Playgroud)

我的项目回购是:( WORKSPACE是一个空文件)

??? myLib
?   ??? BUILD
?   ??? file.sh
??? WORKSPACE
Run Code Online (Sandbox Code Playgroud)

BUILD文件是

genrule(
  name = "tangle_file",
  srcs = ["file.sh"],
  outs = ["file.cpp","file.hpp"],
  cmd =  "./$(location file.sh);cp file.cpp $(@D);cp file.hpp $(@D);"
)

cc_library(
    name = "file",
    srcs = ["file.cpp"],
    hdrs = ["file.hpp"],
#    deps = [":tangle_file"],
    visibility = ["//bin:__pkg__"],
)
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

问题(A),处理genrule()部分:

我必须使用的事实

cmd =  "./$(location …
Run Code Online (Sandbox Code Playgroud)

c++ bazel

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

Blas 和 Lapack 库是否有本机 C++(非 C)接口?

目前,有:

  • cblasblas一起提供,
  • lapacke与lapack一起发货,

然而,这些是 C 接口。

显然,您可以在 C++ 代码中使用它们,但您无法获得这些接口是为 C++ 设计的所有好处。所以我的问题是: 原生 C++ 中是否存在这样的接口?

c++ blas lapack

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

当使用优化标志计算简单的有限差分时,clang ++ v6,7&8 bug /错误结果

我的一位同事发现了这个有趣/令人惊讶的错误.

当使用优化标志(通常为-O2)进行编译时,它会影响clang ++版本6,7和8

代码非常简单,它必须计算有限的差异:

a[i] = x[i+1]-x[i]
b[i] = (y[i+1]-y[i])/a[i]
Run Code Online (Sandbox Code Playgroud)

副代码演示如下:

#include <iostream>
#include <vector>

class Foo {
private:
    std::vector<double> _a;
    std::vector<double> _d;

public:
    Foo(const std::vector<double> &x, const std::vector<double> &y)
        : _a(x.size()), _d(x.size()) {

        for (unsigned int i = 0; i < x.size() - 1; i++) {
            _a[i] = x[i + 1] - x[i];
            _d[i] = (y[i + 1] - y[i]) / _a[i];
        }
    }

    const std::vector<double> &a() const noexcept { return _a; }
};

int main() {

    // Read …
Run Code Online (Sandbox Code Playgroud)

c++ clang++

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

结构字段的默认初始化状态?

在Julia v0.6下,简单的代码:

julia> struct A
             x::Int = 1
       end   
Run Code Online (Sandbox Code Playgroud)

生成此错误:

ERROR: syntax: "x::Int=1" inside type definition is reserved
Run Code Online (Sandbox Code Playgroud)

这是一个相当难以捉摸的信息:保留什么?

- >我是否必须明白,在未来的Julia版本中将允许这种定义?

language-lawyer julia

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

Bazel,我要避免生成所有“便利符号链接”

当您构建一个Bazel项目时,您的WORKSPACE项目根目录将由许多便利符号链接填充:

<workspace-name>/                         <== The workspace directory
  bazel-my-project => <...my-project>     <== Symlink to execRoot
  bazel-out => <...bin>                   <== Convenience symlink to outputPath
  bazel-bin => <...bin>                   <== Convenience symlink to ...
  bazel-genfiles => <...genfiles>         <== Convenience symlink to ...
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅官方文档“ Bazel内部:目录布局”

我的问题:是否有Bazel选项来避免生成所有这些链接,或者至少有一个选项告诉Bazel将所有这些链接放在另一个位置(/tmp/my-project例如)?

(我的动机是我还使用其他工具扫描项目目录中的* .hpp和* .cpp文件,不幸的是,Bazel生成的所有符号链接都弄乱了结果...)。

build bazel

3
推荐指数
2
解决办法
1058
查看次数

Emacs 有漂亮的分页符吗?

在 Emacs 下,如何获得像这样漂亮的分页符?

在此输入图像描述

emacs page-break

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