小编men*_*oom的帖子

std::atomic_ref 需要对齐

根据cppreference,硬件可能要求 an 引用的对象atomic_ref<T>比其他T对象具有更严格的对齐方式,并且 an 上的操作是否atomic_ref是无锁的可以取决于引用对象的对齐方式。

为什么只需要引用的对象具有atomic_ref适当的对齐方式,而std::atomic似乎没有强加这一要求?

c++ atomic memory-alignment stdatomic c++20

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

在 Windows 上的 C++ 应用程序中使用 PyTorch 模型

按照官方 PyTorch教程,我用 Python 创建了模型,通过跟踪将其转换为 Torch 脚本,并将脚本模块保存到文件中.pt。加载模型和 CMakeLists 的 C++ 代码与教程中的代码相同。

\n\n

我下载了LibTorch 1.3(稳定版,Windows,无CUDA,发布版)并解压,所以我的目录结构是:

\n\n
\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80artifact\n\xe2\x94\x82 Traced_resnet_model.pt\n\xe2\ x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80cmakeapp\n\xe2\x94\x82\xe2\x94\x82 CMakeLists.txt\n\xe2 \x94\x82 \xe2\x94\x82 示例-app.cpp\n\xe2\x94\x82 \xe2\x94\x82 \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\ xe2\x94\x80libtorch\n\xe2\x94\x82 \xe2\x94\x82 构建哈希 \n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2 \x94\x80bin\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80cmake\n\xe2\x94\x82 \xe2\x94\x9c \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80include\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80lib \n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80share\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94 \x80\xe2\x94\x80\xe2\x94\x80test\n\n
\n\n

我安装了 Visual Studio 2019,并将 CMake 作为组件安装,因此我运行了 VS2019 的开发人员命令提示符并cd运行到项目目录 (cmakeapp)。

\n\n

根据指南,我运行了以下命令来构建应用程序:

\n\n
mkdir build\ncd build\ncmake -DCMAKE_PREFIX_PATH=..\\libtorch ..\nmake\n
Run Code Online (Sandbox Code Playgroud)\n\n

CMake 似乎成功了,除了一些警告:

\n\n
CMake Warning (dev) at D:/dox/projects/AI/torchscript/libtorch/share/cmake/Caffe\n2/public/utils.cmake:57 (if):\n  Policy CMP0054 is not set: Only interpret if() arguments …
Run Code Online (Sandbox Code Playgroud)

cmake visual-studio torchscript libtorch

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

在 C++ 中为用户定义的类型专门化 std::minus 是否合法?

是否标准库允许用户专门函数对象一样std::plus,并std::minus为自定义类型?

如果我的第一个问题的答案是肯定的,是否允许用户更改呼叫运营商的声明?例如,由于 C++14 std::minus::operator() 声明如下:

constexpr T operator()( const T& lhs, const T& rhs ) const;
Run Code Online (Sandbox Code Playgroud)

更改此运算符使其不再constexpr或返回double而不是 T 是否合法?

namespace std
{
    template <> 
    struct minus<MyArrayType>
    {
        double operator ()(const MyArrayType& x, const MyArrayType& y) const
        {
            return l2_norm(x - y);
        }
    };
}   // std
Run Code Online (Sandbox Code Playgroud)

c++

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

在 SourceTree 中使用 Git LFS 跟踪文件

我下面这个指南有关如何使用Git的LFS。

文章指出,用户需要安装 Git LFS 命令行客户端,或 Git LFS 感知 GUI 客户端,例如 Sourcetree。

尽管看起来很简单,但我找不到有关如何在 SourceTree GUI 中使用 Git LFS 跟踪文件的任何信息,只有命令行指令,如 git lfs track "*.ogg"。是否可以?

atlassian-sourcetree git-lfs

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

coroutine_handle&lt;Promise&gt;::from_promise() 如何在 C++ 中工作

我读的是coroutine_handle可以使用的协程的承诺对象的引用重建coroutine_handle<Promise>::from_promise()的功能。据我所知,promise 对象的定义如下:

class resumable{
public:
  struct promise_type;
  bool resume();
};

struct resumable::promise_type{
  resumable get_return_object() {/**/}
  auto initial_suspend() {/**/}
  auto final_suspend() {/**/}
  void return_void() {}
  void unhandled_exception();
};
Run Code Online (Sandbox Code Playgroud)

鉴于promise_type没有对协程句柄的任何引用,我无法弄清楚重建如何工作。恰恰相反,协程句柄存储了对promise对象的引用,可以通过promise()句柄的方法返回。我找不到有关from_promise函数中实际发生的情况的任何信息。

c++ c++20 c++-coroutine

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

使用 std::back_inserter 的并行执行策略安全吗?

我想知道当输出为 时,使用执行策略std::execution::par和是否安全。例如:std::execution::par_unseqstd::back_insert_iterator

std::vector<std::string> src(100, "test"), dst;
std::move(std::execution::par_unseq, src.begin(), src.end(), std::back_inserter(dst));
Run Code Online (Sandbox Code Playgroud)

是否保证不会对目标向量进行并发插入?

c++ c++17

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

C++ 聚合初始化

根据C++ 参考,聚合初始化具有以下语法:

T object = { arg1, arg2, ... }; 
T object { arg1, arg2, ... };
T object = { .des1 = arg1 , .des2 { arg2 } ... };   
T object {.des1 = arg1 , .des2 { arg2 } ... };
Run Code Online (Sandbox Code Playgroud)

所以这将是聚合初始化的一个示例:

int a = 0;
int b = 0;
std::size_t arr[]{a,b};
Run Code Online (Sandbox Code Playgroud)

但是,如果聚合是在成员初始值设定项列表中初始化的类的成员,那么它仍然是聚合初始化还是不同类型的初始化?

struct S
{
    template <typename T>
    S(T a, T b)
        : arr{ a, b }
    {   }

    std::size_t arr[2];
};
S s{ 1, …
Run Code Online (Sandbox Code Playgroud)

c++

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