小编Phi*_*ßen的帖子

为什么在C++ 11/C++ 14中有自动和支撑初始化器的特殊类型推导规则?

在他的CppCon 2014 talke "Type Deduction和Why You Care"中,Scott Meyers提出了一个问题,即为什么auto在C++ 11/C++ 14标准中有一个关于和支持初始化器的特殊规则(他的问题从36m05开始).

auto的语义与braced-init-list的组合在§7.1.6.4/ 6中定义.


我想到了它,也无法想出一个用例.到目前为止,我所看到的最接近的是Bjarne Stroustrup使用它的一个例子.

2014年的Cpp演讲中"简单易懂任务!" ,他曾经auto用来捕获初始化器(但仅作为解决方法).

这是代码(幻灯片30的一部分,37m10s):

    // auto ss1 = collect({ 1, 2, 3, 4, 5, 6 }, odd); // error: Bummer!
    auto lst = { 1, 2, 3, 4, 5, 6 };
    auto ss2 = collect(lst, odd);    // {1,3,5}
Run Code Online (Sandbox Code Playgroud)

但请注意,这只是一种解决方法.他提到它不应该是必要的.相反,他更愿意直接将参数传递给函数.因此,它不能真正作为auto初始化列表的良好动机.


我对C++的理解并不足以判断Bjarne的例子中允许初始化列表的缺点,正如他所提出的那样.无论如何,它将避免auto在这种情况下的需要.

那么,auto和初始化器列表只是一个可以更好地解决的问题的解决方法吗?或者是否有很好的例子,§7.1.6.4/ 6中的额外自动扣除规则是否有用?

c++ initializer-list auto c++11 c++14

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

std :: tuple和boost :: tuple之间的转换

鉴于boost::tuplestd::tuple,你如何在他们之间转换?

换句话说,您将如何实现以下两个功能?

template <typename... T> boost::tuple<T...> asBoostTuple(  std::tuple<T...> stdTuple);
template <typename... T>   std::tuple<T...> asStdTuple  (boost::tuple<T...> boostTuple);
Run Code Online (Sandbox Code Playgroud)

似乎是一件简单的事情,但我找不到任何好的解决方案.


我尝试了什么?

我最终用模板编程来解决它.它似乎适用于我的具体设置,但它感觉不对(太冗长),我甚至不确定它是否真的适用于所有情况(我稍后会谈到这一点).

无论如何,这是有趣的部分:

template<int offset, typename... T>
struct CopyStdTupleHelper
{
    static void copy(boost::tuple<T...> source, std::tuple<T...>& target) {
        std::get<offset>(target) = std::move(boost::get<offset>(source));
        CopyStdTupleHelper<offset - 1, T...>::copy(source, target);
    }

    static void copy(std::tuple<T...> source, boost::tuple<T...>& target) {
        boost::get<offset>(target) = std::move(std::get<offset>(source));
        CopyStdTupleHelper<offset - 1, T...>::copy(source, target);
    }
};

template<typename... T>
struct CopyStdTupleHelper<-1, T...>
{
    static void copy(boost::tuple<T...> source, std::tuple<T...>& target)
      { /* nothing to …
Run Code Online (Sandbox Code Playgroud)

c++ boost tuples variadic-templates c++14

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

在Lombok项目中的IDE重构支持

Project Lombok很有可能减少Java 8代码库中的样板代码.缺点是它限制了工具支持(重构,静态分析).

例如,在我使用IntelliJ的实验中,对带有注释的类的字段进行重构@Builder,不再有效.我知道没有解决方法(您必须手动修复位置,使用Builder的旧方法名称).

另一个例子是在Eclipse中"查找引用"字段中找不到引用,但一个好的解决方法是打开大纲并在生成的getter/setter上应用"查找引用".

我的问题:

  • 哪些主要IDE(尤其是Eclipse,IntelliJ)的重构功能会破坏?
  • 有没有很好的解决方法?

java eclipse intellij-idea lombok java-8

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

在混合Java/Kotlin项目中使用Dagger 2的Maven配置

在混合Java/Kotlin项目中使用Dagger 2的推荐Maven设置是什么?

我找到了一个使用Gradle的示例项目:https://github.com/damianpetla/kotlin-dagger-example 与Maven类似的东西会非常有用.


更新:我尝试了什么?

我用从科特林配置kotlinlang.org/docs/reference/using-maven.html 和匕首配置google.github.io/dagger.我还使用了build-helper-maven-plugin插件来集成IDEA中的注释处理.

我的主要问题是我遇到了编译周期.我的配置混合了Kotlin的编译并调用了注释处理器,它生成了Dagger2类.我没有系统地尝试将两个阶段分开但缺乏更深入的Maven理解以使其工作.

java maven kotlin dagger-2

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

核心连通组件算法

对于无向图,我有4,000,000,000(40亿)个边.它们在大型文本文件中表示为节点ID对.我想计算此图的连接组件.不幸的是,一旦你将带有边缘的节点ID加载到内存中,这就需要超过128GB的RAM.

是否有一个用于查找相对简单的连接组件的核心算法?或者甚至更好,它可以与Unix命令工具和现有(python)库拼凑在一起吗?

algorithm graph space-complexity

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

webextension:为什么浏览器在请求的 URL 中添加尾部斜杠?

当我向 发出请求时,为什么我会在webRequest.onBeforeRequestListenerhttp://www.example.com中看到?http://www.example.com/

例如:

chrome.webRequest.onBeforeRequest.addListener(
  details => console.log('Sending request to', details.url),
  { urls: ['<all_urls>'] });
fetch('http://www.example.com');
Run Code Online (Sandbox Code Playgroud)

将打印

Sending request to http://www.example.com/
Run Code Online (Sandbox Code Playgroud)

这与网络请求监视器中显示的请求 URL 一致。例如,如果我将其转换为curl命令,则请求如下所示:

curl 'http://www.example.com/' -H 'Accept: */*' -H 'Connection: keep-alive'
    -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9'
    -H 'User-Agent: ...' --compressed
Run Code Online (Sandbox Code Playgroud)

所以,原来出去的请求是 for ,http://www.example.com/不是 for http://www.example.com。该决定必须是在浏览器中做出的,而不是由服务器做出的。

XMLHttpRequest使用代替时也会发生相同的行为fetch。在我的示例中,我使用了 Chrome,但在 Firefox 上也是一样的。

问题:

  • 为什么浏览器会自动更改它?其他 URL 也会发生这种情况。根据我的理解,添加尾部斜杠通常会起作用,但总的来说,这是一个重大变化。
  • 如果我想在onBeforeRequest监听器中过滤当前对特定 URL 的请求,如何可靠地匹配它?例如,仅检查 URL 是否相同将会失败。
  • 浏览器中是否还有更多重写 URL 规则需要注意?

javascript url http google-chrome-extension firefox-addon-webextensions

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

clang: -fsanitize=undefined 具有 128 个整数运算(对 `__muloti4' 的未定义引用)

在 clang 中,当程序使用 128 位整数时,如果未定义行为 Sanitizer ( ) ,我会遇到链接错误。-fsanitize=undefined链接错误抱怨__muloti4

$ cat example.c
__int128_t a;
int main (void) {
  a = a * a;
  return 0;
}

$ clang -fsanitize=undefined example.c 
/tmp/example-df4873.o: In function `main':
example.c:(.text+0x4c): undefined reference to `__muloti4'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

(在 Ubuntu 17.10 上使用 clang 4.0.1 进行测试。)

使用 gcc,它可以开箱即用 ( gcc -fsanitize=undefined example.c)。

与 clang 一起使用的是以下调用,但我既不完全理解它 ( --rtlib=compiler-rt),也不看起来像我:

clang -lgcc_s …
Run Code Online (Sandbox Code Playgroud)

c clang linker-errors sanitizer ubsan

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

我可以避免使用$ scope.$ watch返回一个未定义的值吗?

当我在Angular via中观察范围变量时$scope.$watch,它似乎undefined只是在watch函数的第一次调用时.

是否可以重写我的代码以避免不必要的检查undefined

这是一个最小的例子:

1)jsfiddle

2)HTML:

<div ng-app="MyApp">
   <div ng-controller="MyCtrl">Enter some text:
      <input type="text" ng-model="text" size="30" />
      <p>You entered: {{text}}</p>
      <p>Length: {{textLength}}</p>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

3)Javascript:

angular.module('MyApp', []).controller(
  'MyCtrl', function ($scope) {
    $scope.textLength = 0;
    $scope.$watch('text', function (value) {
      if (typeof value !== 'undefined') {
        $scope.textLength = value.length;
      } else {
        $scope.textLength = 'observed value is undefined';
      }
    });
});
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

avro union的json编码

我的 avro 模式中有一个 favorite_number 的联合,它可以是 null 或 int。当我对对象进行 json 编码时,我得到:

{“name”:“Alyssa”,“favorite_number”:{“int”:7},“favorite_color”:null}

我试图摆脱联合的类型指示符,在本例中是 int,以便它变成:

{"name": "Alyssa", "favorite_number": 7, "favorite_color": "blue"}

avro 架构:

{"name": "person", "type": "record",
           "fields": [
              {"name": "name", "type": "string"},
              {"name": "favorite_number", "type": ["null", "int"], "default": null},
              {"name": "favorite_color", "type": "string"}
           ]
   }
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?谢谢!

java json avro

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

自定义策略:IdentityExperienceFramework 与 ProxyIdentityExperienceFramework

在 Azure AD B2C 中使用自定义策略时,您通常会看到两种类型的应用程序正在注册:

  • Web API,通常称为IdentityExperienceFramework
  • 一个本机应用程序,通常称为ProxyIdentityExperienceFramework

引用自定义策略教程中的内容:

Azure AD B2C 要求您注册两个应用程序,用于使用本地帐户注册和登录用户:IdentityExperienceFramework(一个 Web API)和ProxyIdentityExperienceFramework(具有对 IdentityExperienceFramework 应用程序委派权限的本机应用程序)。您的用户可以使用电子邮件地址或用户名和密码进行注册,以访问您的租户注册的应用程序,这将创建一个“本地帐户”。本地帐户仅存在于 Azure AD B2C 租户中。

我还没有找到为什么需要这两个应用程序的动机。所有教程以及官方文档都会跳过它。他们只解释了创建和注册应用程序的步骤,但没有解释其确切目的。

问题:

  • IdentityExperienceFramework 和 ProxyIdentityExperienceFramework 之间有什么区别?
  • 为什么典型流程(例如注册/登录)中需要这两个应用程序?
  • 是否存在自定义策略仅需要这些应用程序之一的用例?或者比这两个更多?

azure azure-ad-b2c azure-ad-b2c-custom-policy

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