小编Tar*_*arc的帖子

批处理文件中延迟扩展的示例

有人可以给我一个例子,说明批处理脚本在有或没有延迟扩展的情况下会有不同的行为吗?您是否有任何不希望使用延迟扩展的情况?谢谢.

cmd batch-file delayedvariableexpansion

43
推荐指数
3
解决办法
4万
查看次数

在CMake中强制使用C99(使用'for'循环初始声明)

我一直在寻找一种可移植的方法来强制CMake启用编译器的C99功能,以避免出现以下gcc错误:

error: ‘for’ loop initial declarations are only allowed in C99 mode
for (int s = 1; s <= in_para->StepNumber; s++){
^
Run Code Online (Sandbox Code Playgroud)

我也不想检查哪个编译器并附加如下内容:

set(CMAKE_C_FLAGS "-std=c99") # that would be bad
Run Code Online (Sandbox Code Playgroud)

所以我发现这篇文章:在CMake中启用C99以及相关的功能请求:0012300:CMake没有跨平台的方式来请求C99.在这个Mantis bug中,我了解了target_compiler_features之后我发现了这些SOF答案:如何在CMake中激活C++ 11?以及如何使用CMake检测编译器的C++ 11支持.

所以我的问题是:这target_compiler_features将提供一种需要C功能和C++功能的方法吗?现在最简单的方法是什么 - 我目前正在使用CMake 2.8.12.2.这target_compiler_features不是CMake的最新发行版本(3.0.0).你知道什么时候被释放吗?

c c++ c99 cmake

24
推荐指数
2
解决办法
2万
查看次数

ASP.NET core - 如何传递可选的 [FromBody] 参数?

如何在 ASP.NET Core (5.0) 中传递可选(可为空)[FromBody] 参数?如果我不在请求中发送正文,则会收到 415 不支持的媒体类型错误。可以配置吗?如果可以,如何在控制器或操作而不是应用程序级别上进行配置?我认为它必须与模型验证有关,但不确定。谢谢。

[HttpGet("[action]")]
public async Task<IActionResult> GetElementsAsync([FromBody] IEnumerable<int> elements = default)
{
  var result = await dataService.GetData(elements);
  return Ok(result);
}
Run Code Online (Sandbox Code Playgroud)

编辑:澄清一下:

这是典型的场景并且可以正常工作: 这是典型场景并且可以正常工作

但是传递空主体会立即返回 415,甚至没有到达行动: 传空体就是没有到达action就立即返回415

c# controller asp.net-core

15
推荐指数
2
解决办法
2万
查看次数

两个进程如何共享同一个共享库?

我一直在努力更好地了解共享库的工作原理,但我无法围绕两件事进行思考。

1- 每个进程都有自己的虚拟内存空间和页表,因此如果共享库被加载到一个进程虚拟内存空间中,那么第二个进程如何访问该共享库,因为它不在其内存空间中?

2- 我知道只有文本部分是共享的,而全局数据不是,这怎么可能?我的理解是,对全局变量的每次引用都是通过全局偏移表(简称 GOT)完成的。所以,如果我有这行代码,x = glob那么这将大致等于mov eax,DWORD PTR [ecx-0x10]汇编中的东西,其中ecx用作 GOT 的基值。但如果是这种情况,那么很明显,无论哪个进程调用该行,它将始终访问相同的全局变量,其地址位于 GOT 中的偏移量 0x10。那么,如果两个进程使用引用相同 GOT 条目的相同文本部分,那么它们如何拥有不同的全局变量副本呢?

unix shared-libraries dynamic-linking position-independent-code got

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

变体模板,类型演绎和std :: function

我正在尝试创建一个模板函数,可以通过任何类型和数量的参数传递一些其他函数并将其绑定到std::function.我成功地做到了这一点:

#include <iostream>
#include <functional>

int foo(int bar)
{
  std::cout << bar << std::endl;
  return bar;
}

template <typename Ret, typename... Args>
std::function<Ret (Args...)> func(std::function<Ret (Args...)> f)
{
  return f;
}

int main()
{
  //auto barp = func(foo); // compilation error
  auto bar  = func(std::function<void (int)>(foo));

  bar (0); // prints 0
}
Run Code Online (Sandbox Code Playgroud)

我想调用auto barp = func(foo);并推导出类型,但是这一行给出了以下编译错误:

error: no matching function for call to ‘func(void (&)(int))’
    auto barp = func(foo);
                        ^
note: candidate is:
note: template<class Ret, …
Run Code Online (Sandbox Code Playgroud)

c++ variadic-templates c++11 std-function

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

从std :: deque线程对emplace_back()和operator []()的并发调用是否安全?

来自emplace_back()以下文档的摘录:

  • 迭代器有效性

与此容器相关的所有迭代器都是无效的,但指针和引用仍然有效,指的是它们在调用之前引用的相同元素.

  • 数据竞赛

容器已修改.

调用不访问任何包含的元素:同时访问或修改它们是安全的(尽管请参见上面的迭代器有效性).

以及以下文档的摘录operator[]():

  • 数据竞赛

访问容器(const和非const版本都不会修改容器).

可能会访问或修改元素n.同时访问或修改其他元素是安全的.

因此,鉴于deque的某个实例至少有一个元素,通过访问它operator[]()并同时调用emplace_back()容器确实是线程安全的?

我倾向于说它是,但不能决定"访问" emplace_back()的文档是否包括使用operator[]()如下:

int access( std::deque< int > & q )
{
    return q[ 0 ];
}

void emplace( std::deque< int > & q , int i )
{
    q.emplace_back( i );
}
Run Code Online (Sandbox Code Playgroud)

其中两个函数同时调用,或者"访问"仅适用于已经采用某些引用或指针的元素:

std::deque< int > q { 1 };

auto * ptr = & q[ 0 ]

std::thread t1 ( [ …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading thread-safety stddeque

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

C++ 标准中“好像”规则的声明或基础在哪里?

经过一些谷歌搜索(例如,site:eel.is "as if rule")后,我找不到一个合适的地方,在 C++ 标准中明确规定了所谓的“好像”规则。我所能找到的是,在标准中调用它的那些地方,intro.execution给出了参考。

intro.execution似乎没有明确引用该规则的任何一般形式。我可能在这里遗漏了一些微妙的东西,但是你能指出一个或多个地方,在那里传达了对规则的精确规范性理解吗?也许整体intro.execution确实是为了传达我们所谓的野外“好像”规则?我承认我只是略读了一下。

我正在使用这个网站浏览标准的工作草案。

例如,可以在cppreference 站点中找到“as if”规则的定义,它表示只要满足某些约束,例如出于优化原因,编译器就可以对程序执行转换。

c++ language-lawyer as-if

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

ASP.NET Core依赖注入添加多个HttpClient

services.AddHttpClient("Name", client =>
    {
        client.DefaultRequestHeaders.AcceptLanguage.Clear();
        client.BaseAddress = new Uri('BaseUrl');
    })
    .AddAuthenticationHandler(config).Services
    .AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
        .CreateClient('ClientName'));
Run Code Online (Sandbox Code Playgroud)
public partial class StudentClient : IStudentClient
{
    private System.Net.Http.HttpClient _httpClient;

    public UsersClient(System.Net.Http.HttpClient httpClient)
    {
        _httpClient = httpClient;
    }
} 
Run Code Online (Sandbox Code Playgroud)

现在我已经给出了使用 HttpClient 访问服务的代码。现在的问题是我有多个基本 URL 来调用不同的服务,我也需要对其进行配置。那么我该如何实施呢?

c# dependency-injection httpclient asp.net-core

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

从mpl :: vector生成fusion :: vector

如何生成fusion::vectormpl::vector?如何生成mpl::vectorfusion::vector

BOOST_MPL_ASSERT((is_same<
                  fusion::vector<int, char>,
                  generate_fusion_vector<mpl::vector<int, char> >::type >));

BOOST_MPL_ASSERT((is_same<
                  mpl::vector<int, char>,
                  generate_mpl_vector<fusion::vector<int, char> >::type >));
Run Code Online (Sandbox Code Playgroud)

我需要generate_fusion_vectorgenerate_mpl_vector元功能.我可以编写自己的元函数,但我怀疑它们已经存在.

我之前有过使用过fusion::map帮助的经验result_of::as_map,但是在当前的boost(trunk,也是1.39)中会出现这样的错误:

D:\Libraries\boost_trunk\boost/fusion/sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol is neither a class template nor a function template
        D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) : see reference to class template instantiation 'boost::fusion::result_of::size' being compiled
        with
        [
            Sequence=boost::mpl::vector
        ]
        temp.cpp(71) : see reference to class template instantiation 'boost::fusion::result_of::as_vector' being compiled
Run Code Online (Sandbox Code Playgroud)

我不明白发生了什么事?

c++ templates metaprogramming boost-fusion

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

为什么你必须在C中读取指针声明后缀?

在C语言中,对于简单的情况,似乎为了读取指针声明,你必须向后进行.例如:

int n; 
int *p = &n; // p is a pointer to int
int *const np = &n; // np is a const pointer to int
int *const *npp = &np; //npp is a (non-const) pointer to const pointer to (non-const) int
Run Code Online (Sandbox Code Playgroud)

即使解析类型声明的正确方法是通过所谓的螺旋规则,如果解析规则不同以便以另一种方式容纳简单指针声明的读取,这不是更容易吗?例如:

int n;
*int p = &n; // p is a pointer to int
const *int np = &n; // np is a const pointer to int
*const *int npp = &np; // npp is …
Run Code Online (Sandbox Code Playgroud)

c c++ syntax pointers

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