在他的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中的额外自动扣除规则是否有用?
鉴于boost::tuple和std::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) Project Lombok很有可能减少Java 8代码库中的样板代码.缺点是它限制了工具支持(重构,静态分析).
例如,在我使用IntelliJ的实验中,对带有注释的类的字段进行重构@Builder,不再有效.我知道没有解决方法(您必须手动修复位置,使用Builder的旧方法名称).
另一个例子是在Eclipse中"查找引用"字段中找不到引用,但一个好的解决方法是打开大纲并在生成的getter/setter上应用"查找引用".
我的问题:
在混合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理解以使其工作.
对于无向图,我有4,000,000,000(40亿)个边.它们在大型文本文件中表示为节点ID对.我想计算此图的连接组件.不幸的是,一旦你将带有边缘的节点ID加载到内存中,这就需要超过128GB的RAM.
是否有一个用于查找相对简单的连接组件的核心算法?或者甚至更好,它可以与Unix命令工具和现有(python)库拼凑在一起吗?
当我向 发出请求时,为什么我会在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 上也是一样的。
问题:
onBeforeRequest监听器中过滤当前对特定 URL 的请求,如何可靠地匹配它?例如,仅检查 URL 是否相同将会失败。javascript url http google-chrome-extension firefox-addon-webextensions
在 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) 当我在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) 我的 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)
有没有办法做到这一点?谢谢!
在 Azure AD B2C 中使用自定义策略时,您通常会看到两种类型的应用程序正在注册:
引用自定义策略教程中的内容:
Azure AD B2C 要求您注册两个应用程序,用于使用本地帐户注册和登录用户:IdentityExperienceFramework(一个 Web API)和ProxyIdentityExperienceFramework(具有对 IdentityExperienceFramework 应用程序委派权限的本机应用程序)。您的用户可以使用电子邮件地址或用户名和密码进行注册,以访问您的租户注册的应用程序,这将创建一个“本地帐户”。本地帐户仅存在于 Azure AD B2C 租户中。
我还没有找到为什么需要这两个应用程序的动机。所有教程以及官方文档都会跳过它。他们只解释了创建和注册应用程序的步骤,但没有解释其确切目的。
问题: