我最近有一个问题,我不得不忽略我的最后一次提交,所以在命令行上我做了以下事情:
git push origin --force
这工作正常,但我通常从Visual Studio团队资源管理器中进行推/拉,但我无法找到如何 - 从那里强制推送
是否有可能或者只能从命令行完成?
我有一个引用std::vector<char>
,希望将其用作接受函数的参数std::vector<unsigned char>
。我可以不复制就做吗?
我有以下功能,它可以工作;但是我不确定是否真的要进行复制-有人可以帮我理解吗?是否std::move
可以避免复制或是否尚未复制?
static void showDataBlock(bool usefold, bool usecolor,
std::vector<char> &chunkdata)
{
char* buf = chunkdata.data();
unsigned char* membuf = reinterpret_cast<unsigned char*>(buf);
std::vector<unsigned char> vec(membuf, membuf + chunkdata.size());
showDataBlock(usefold, usecolor, vec);
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以写:
std::vector<unsigned char> vec(std::move(membuf),
std::move(membuf) + chunkdata.size());
Run Code Online (Sandbox Code Playgroud)
这是过度杀伤力吗?实际发生了什么?
我有一个add
使用以下设置的工作虚拟功能:
using Func = std::function<std::vector<unsigned char>()>;
class cfExecutor {
public:
cfExecutor();
virtual ~cfExecutor();
/// Enqueue a function to be executed by this executor. This and all
/// variants must be threadsafe.
virtual void add(Func) = 0;
virtual void add(std::vector<Variant> params, Func callback) = 0;
};
class ManualExecutor : public cfExecutor
{
std::mutex lock_; // avoid multiple entity updating the function container
std::queue<Func> funcs_; // functions queued for running
public:
std::map<int8_t, Func> funcs; // Function container (priority,Func) - added …
Run Code Online (Sandbox Code Playgroud) 我有一个函数,它接受多个参数,如下所示:
void test(const auto&...args)
{
typedef boost::variant<int, float, std::string> Variant;
std::vector<Variant> vec = {args...}
}
Run Code Online (Sandbox Code Playgroud)
这很好用 - 根据 Variant,参数在向量中作为不同类型
我想从类似的向量中获取参数并将其放回一个接受 args 的函数中...
像这样:
args = vec;
test2(args);
void test2(const auto&...args);
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
我试图移植一些我在ubuntu上制作的C++ 17代码(gnu ++ 11)
typedef boost::variant<int, float, std::string > Variant;
using Func = std::function<std::vector<unsigned char>(std::vector<Variant>)>;
void addexecutorfunc( Func callback, const auto&...args )
{
std::vector<Variant> vec = {args...};
executor.add(vec, std::move(callback));
}
Run Code Online (Sandbox Code Playgroud)
这段代码在ubuntu上编译和工作正常,但是当尝试使用visual studio 2017(v141)[ISO C++最新草案标准(/ std:c ++ latest)]在Windows上编译时,我得到以下内容:
错误C3533:参数不能包含'auto'的类型
我想也许它与在当前的C++ 17版本中没有实现的Concepts lite有关,或者这是错的?
如果我可以设置编译器使用auto作为参数和参数包,那么这将是最好的,但如果这是不可能的,那么我将不得不重写我的代码遵循C++ 17 windows标准 - 任何关于如何做的建议这没有在模板地狱中结束