我想知道以下两个声明之间的区别是什么,如果两者都写在一个头文件中:
inline thread_local MyClass obj1; // inline with thread_local
thread_local MyClass obj2; // no inline
Run Code Online (Sandbox Code Playgroud)
如 C++17 中所述,向变量添加内联会强制所有翻译单元看到该变量的相同地址。这是否意味着可以obj2在不同的翻译单元中获得不同的地址值?在什么情况下要突出显示我们应该使用obj1而不是obj2?
我试着用:
std::map<std::wstring, std::pair<std::wstring, INT_PTR>> mm;
**mm.insert(_T("name"), std::make_pair(_T("value1"), static_cast<INT_PTR>(1));**
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
如果我用这个:
mm[_T("name")] = std::make_pair(_T("value1"), static_cast<INT_PTR>(1));
Run Code Online (Sandbox Code Playgroud)
有用.
错误是这样的:
No constructor could take the source type, or constructor overload resolution was ambiguous
Run Code Online (Sandbox Code Playgroud)
与此相同:
std::map<std::wstring, std::vector<std::pair<std::wstring, INT_PTR>>> mm;
std::vector <std::pair<std::wstring, INT_PTR>> vec;
vec.push_back(std::make_pair(_T("value1"), static_cast<INT_PTR>(1)));
mm.insert(_T("name"), vec);
Run Code Online (Sandbox Code Playgroud)
为什么它可以像这样使用"insert_or_assign"?
mm.insert_or_assign(_T("name"), vec);
Run Code Online (Sandbox Code Playgroud) 如果a,b,c,..表示 类型,则令 为我正在寻找地图的(a,b)类型, ,这样std::pair<a,b>F
F : ((((a,b),c),d),...))) -> std::tuple<a,b,c,d...>
Run Code Online (Sandbox Code Playgroud)
它是否以标准库中的某个现有名称存在?如果没有,是否有另一个库可以做到这一点,或者这很容易实现,但我太笨了,不知道该怎么做?
我已经尝试寻找解决方案的多种方法,但到目前为止找不到合适的方法。
我正在使用分离线程,因为我不希望我的主线程等待/阻塞新的子线程,因为它还有许多其他重要的事情要做。
我创建一个线程如下:
std::thread rsync_t(&PreCompile::RunPreCompileThr, obj, arg1, arg2);
rsync_t.detach();
Run Code Online (Sandbox Code Playgroud)
现在,目标是定期检查这个分离的线程是否处于活动状态并正在运行。
我尝试了未来/承诺和异步方式来做到这一点,但它需要 .get(),它类似于 join(),这是我不想要的。
有什么建议可以做到这一点吗?
提前致谢。