小编psc*_*ill的帖子

使用clang格式放置const

clang-format有很多关于空白的配置选项,还有一些关于代码顺序(包括的顺序).是否可以重新排序const限定符,以便将它们放在相应类型的右侧?

示例:声明const int x = 0;应格式化为int const x = 0;.

c++ clang-format

14
推荐指数
2
解决办法
994
查看次数

我应该使用 OnAfterRenderAsync 而不是 OnInitializedAsync 吗?

在 Blazor 服务器组件中,我用于OnInitializedAsync()连接来自注入服务的事件:

protected override async Task OnInitializedAsync()
{
    _fooRepository.SomethingChanged += OnSomethingChanged;
    await Refresh();
}

public void Dispose()
{
    _fooRepository.SomethingChanged -= OnSomethingChanged;
}

private async Task Refresh()
{
    this.FooData = await LoadDataFromRepository();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,根据文档,该OnInitializedAsync方法可能会被调用两次,具体取决于渲染模式。

我发现了一些建议使用OnAfterRenderAsync初始化逻辑的示例:

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        _fooRepository.SomethingChanged += OnSomethingChanged;
        await Refresh();
    }
}

[... Dispose and Refresh as above... ]
Run Code Online (Sandbox Code Playgroud)

OnAfterRenderAsync使用代替时有缺点吗OnInitializedAsync?在我看来,我应该放弃OnInitializedAsync并默认OnAfterRenderAsync

c# blazor

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

将numpy.get_include()参数添加到setuptools而不预先安装numpy

我目前正在开发一个使用cython和的python包,numpy并且我希望使用pip install干净的python安装中的命令来安装包.应自动安装所有依赖项.我正在使用setuptools以下内容setup.py:

import setuptools

my_c_lib_ext = setuptools.Extension(
    name="my_c_lib",
    sources=["my_c_lib/some_file.pyx"]
)

setuptools.setup(
    name="my_lib",
    version="0.0.1",
    author="Me",
    author_email="me@myself.com",
    description="Some python library",
    packages=["my_lib"],
    ext_modules=[my_c_lib_ext],
    setup_requires=["cython >= 0.29"],
    install_requires=["numpy >= 1.15"],
    classifiers=[
        "Programming Language :: Python :: 3",
        "Operating System :: OS Independent"
    ]
)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这一点很有效.该pip install命令下载cython了该构建,并能够构建我的包并与其一起安装numpy.

现在我想提高cython代码的性能,这会导致我的代码发生一些变化setup.py.我需要添加include_dirs=[numpy.get_include()]调用setuptools.Extension(...)setuptools.setup(...)哪些意味着我还需要import numpy.(请参阅http://docs.cython.org/en/latest/src/tutorial/numpy.html让distutils在正确的位置查找numpy头文件.)

这是不好的.现在用户无法pip install从干净的环境中调用,因为 …

numpy setuptools cython python-3.x

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

我的API函数应该使用shared_ptr还是weak_ptr

我目前正在设计一个API,我不确定我的功能是否应该采用shared_ptrweak_ptr.有些小部件包含查看器.观众具有add_painter向观众添加画家的功能.当观众需要重绘时,它会使用画家绘制缓冲区并显示结果.我得出结论,观众应该使用weak_ptr以下方式来控制画家:

  • 画家可以在多个观众中使用,因此观众不能拥有画家.
  • 删除画家应将其从观看者中删除.这样,用户无需记住他们必须调用remove_painter函数.

可能有不同类型的查看者,因此它们隐藏在界面后面.什么签名最适合add_painter界面中的功能?

我应该直接使用void add_painter(weak_ptr<Painter> const& p)吗?这意味着具体的实现存储画家使用weak_ptr,但我不能强制执行:实现可以只做painters.push_back(weak_ptr.lock())和存储shared_ptr.

我应该用void add_painter(shared_ptr<Painter> const& p)吗?这意味着观众拥有强大的引用,因此删除画家不一定会将其从观看者中删除.

我还考虑将画家直接存储在接口类中,但是它不再是真正的接口,是吗?

c++ shared-ptr weak-ptr

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

为什么不能静态链接动态库?

使用外部库时,您通常必须决定是使用库的静态版本还是动态版本。通常,您不能交换它们:如果库是作为动态库构建的,则不能针对它进行静态链接。

为什么会这样?

示例:我正在 Windows 上构建一个 C++ 程序并使用一个库,该库.lib为链接器提供一个小文件和一个.dll在运行我的可执行文件时必须存在的大文件。如果.dll运行时可以解析里面的库代码,那为什么不能在编译时解析,直接放到我的可执行文件中呢?

dynamic-linking static-linking

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

为什么局部变量的vector :: push_back没有移动优化?

在C++ 11中,您可以std::vector::push_back结合使用,std::move以便在将元素插入向量时避免复制.标准中是否有一节禁止编译器std::move自动使用调用后未使用的局部变量push_back?当填充具有大元素的向量时,这可以是巨大的性能益处.

我使用gcc 7.1.0检查了以下代码,并且在版本2打印时打印-O3了版本1 .movecopy

#include <iostream>
#include <string>
#include <vector>

struct S
{
    S() = default;
    S(S const&) { std::cout << "copy" << std::endl; }
    S(S &&) { std::cout << "move" << std::endl; }
    std::string a;
    std::string b;
};

void fill_members(S& s) { /*...*/ }

int main()
{
    std::vector<S> v;
    {
        S s;

        // Somehow fill members of s, maybe use a function call for that.
        fill_members(s); …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector compiler-optimization move-semantics c++11

5
推荐指数
0
解决办法
541
查看次数

批量标准化文件路径

有没有办法..从批处理中解析绝对文件路径?例如,应输出以下批处理脚本C:\Users\xyz\other\abc.txt:

REM Project dir is an absolute path, for example, C:\Users\xyz\project\
SET projectDir=%~1

REM Target file is a path relative to the project dir, for example, ..\other\abc.txt
SET target=%~2

REM Concatenate paths. This becomes C:\Users\xyz\project\..\other\abc.txt
SET absoluteTarget=%projectDir%%target%
SET absoluteTargetClean=...
echo %absoluteTargetClean%
Run Code Online (Sandbox Code Playgroud)

absoluteTarget变量是指已存在的文件.

我需要相同的目录而不是文件.你能用同样的方法来实现吗?

windows batch-file

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