这是我的情况:
template<typename T, typename F>
inline
auto do_with(T&& rvalue, F&& f) {
auto obj = std::make_unique<T>(std::forward<T>(rvalue));
auto fut = f(*obj);
return fut.then_wrapped([obj = std::move(obj)] (auto&& fut) {
return std::move(fut);
});
}
Run Code Online (Sandbox Code Playgroud)
我想确保模板参数F&& f只接受非const左值引用.我应该如何强制执行此操作?
我正在读斯科特的书《有效的现代c ++》。在第26项中,有一个我在Wandbox上编写的示例:https ://wandbox.org/permlink/6DKoDqg4jAjA9ZTB
我想验证好的代码比坏的代码要好多少。但是,性能比较不是我期望的,即使是好的也比坏的要慢。我不知道怎么了。
为防止wandbox的代码消失,下面是代码:
#include <iostream>
#include <chrono>
#include <cstdlib>
#include <set>
#include <string>
using namespace std;
std::multiset<std::string> names;
void bad_logAndAdd(const std::string& name) {
auto now = std::chrono::system_clock::now();
names.emplace(name);
}
template <typename T>
void good_logAndAdd(T&& name) {
auto now = std::chrono::system_clock::now();
names.emplace(std::forward<T>(name));
}
void bad() {
for (int i=0; i<1000000; i++) {
string petname("cs");
bad_logAndAdd(petname);
bad_logAndAdd(std::string("abc"));
bad_logAndAdd("dog");
}
}
void good() {
for (int i=0; i<1000000; i++) {
string petname("cs");
good_logAndAdd(petname);
good_logAndAdd(std::string("abc"));
good_logAndAdd("dog");
}
}
int main()
{ …Run Code Online (Sandbox Code Playgroud) 我卸载了vim74并编译了vim81并安装了它.然而,与vim74相比,我发现它很奇怪.当HOME目录下没有.vimrc文件时,我打开一个c ++文件,语法高亮显示正常,我可以Backspace用来删除字母.但是,当我在HOME目录下添加一个.vimrc并且只是放入set number它时,当打开c ++源文件时,没有突出显示,也Backspace没有工作.这是为什么 ?我以前在vim74下的.vimrc中添加了一些配置,这种情况永远不会发生.
我发现当我在本地运行一个脚本时,比如
./run.sh a "b c"
Run Code Online (Sandbox Code Playgroud)
在 run.sh 中使用“$@”时,它将识别两个参数。但是,当通过 ssh 在远程机器上使用时,就不是这样了。
ssh user@host ./run.sh a "b c"
Run Code Online (Sandbox Code Playgroud)
那么我应该如何实现这一目标?