[ 前言:关联的C++容器std::map有点像只有一个关键列的微数据库.Boost bimap将它提升为一个两列的表,在两列中都有查找,但这就像这个类比一样 - 没有"polymap"概括了这个想法.
无论如何,我想继续将地图视为数据库,现在我想知道是否有一个迭代器(或其他解决方案)允许我做几个组成映射的UNION.也就是说,所有的地图都有相同的类型(或者至少是值类型和比较器),我想要一个迭代器将整个集合视为一个大的多重映射(重复的键都可以),让我在正确的联合中遍历它订购.
这样的事情是否存在,也许在Boost中?或者是否容易装备?在伪代码中:
std::map<K, M> m1, m2;
union_iterator<K, M> u(m1, m2)
for(auto it = u.begin(); it != u.end(); ++it) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
例如,如果我们有:
m1 = { { 9:00, "Check in"}, { 12:00, "Break" }, { 16:00, "Check out"} };
m2 = { { 10:30, "coffee" }, { 12:15, "baked beans" }, { 15:00, "lies" } };
Run Code Online (Sandbox Code Playgroud)
然后我想要迭代器生成:
9:00, "Check in"; 10:30, "coffee"; 12:00, "Break"; 12:15, "baked beans"; ...
Run Code Online (Sandbox Code Playgroud) 更新:以下问题似乎取决于该-fwhole-program选项.
我一直在玩内存分配,我遇到了一个小小的谜团:在GCC(4.6)中,当我用[/] 编译时如何std::string分配它的内存[ edit-fwhole-program ]?
有以下测试程序:
#include <new>
#include <string>
#include <iostream>
#include <cstdlib>
void * operator new(std::size_t n) throw(std::bad_alloc)
{
void * const p = std::malloc(n);
if (p == NULL) throw std::bad_alloc();
std::cerr << "new() requests " << n << " bytes, allocated at " << p << ".\n";
return p;
}
void operator delete(void * p) noexcept
{
std::cerr << "delete() at " << p << ".\n";
std::free(p);
}
int main()
{ …Run Code Online (Sandbox Code Playgroud) 我有用C++编写的源代码/ lib - 现在我想在Android NDK项目(NDK 6)中编译和使用相同的代码.我能够编译大多数C++文件,除了基于"std :: wstring"的功能.
在Application.mk中,当我指定APP_STL: = stlport_static它然后它编译std::wstring基于代码,但当我指定APP_STL: = gnustl_static它无法编译.我不知道如何解决std::wstring相关问题APP_STL: = gnustl_static
任何指针或帮助将非常感激.
[免责声明:我知道这个问题的答案.我认为这可能有一些普遍的兴趣.]
问题:我们怎样才能有一个类型特征产生由执行默认参数促销产生的类型?
动机:我希望能够可移植地使用变量参数.例如:
void foo(char const * fmt, ...); // Please pass: * unsigned short
// * bool
// * char32_t
// * unsigned char
Run Code Online (Sandbox Code Playgroud)
当将参数传递给没有参数的函数调用时,即匹配省略号时,参数会进行默认参数提升.到目前为止一直很好,但这些促销是依赖于平台的.我可以恢复参数va_arg(ap, T),但是什么T?
现在,对于一些简单的情况,这很容易:例如,我总是可以说:
unsigned short n = va_args(ap, unsigned int);
Run Code Online (Sandbox Code Playgroud)
默认促销将导致a signed int或an unsigned int,但根据,例如,C11 7.16.1.1/3,va-casting unsigned int总是很好,因为即使默认促销结果为a int,原始值也可以由两者表示类型.
但是当我期待一个类型时,我应该选择什么类型char32_t?C++ 11 4.5/2使得结果类型大开.所以我想要一个让我写的特质:
char32_t c = va_args(ap, default_promote<char32_t>::type);
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
当参数类型不能作为变量参数传递时,产生静态断言的特征的加值点.
引用cppreference:
std :: random_device是一个非确定性随机数引擎,但如果不支持非确定性随机数生成,则允许实现使用伪随机数引擎实现std :: random_device.
有没有办法检查当前实现是否使用PRNG而不是RNG(然后说出错并退出),如果没有,为什么不呢?
请注意,一点点谷歌搜索显示至少MinGW std::random_device以这种方式实现,因此如果std::random_device要使用它是真正的危险.
---编辑---
而且,如果答案是否定的,有人可以给一些见解,为什么没有这样的功能/特征/ 东西,我会很感兴趣.
我在多个示例中看到,您可以使用单个字符捕获多个变量,如下所示:
Rect rect;
Point point;
auto someLambda = [&](const SomeType& var)
{
if (rect.Contains(point))
{
var.Something();
}
this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)
这最终会抓住rect并point通过引用获得访问权限this,但它实际捕获了多少?它只捕获它需要的变量,还是从字面上捕获当前范围内的所有变量?
我在其他示例中看到,您还可以指定要捕获的各个变量:
Rect rect;
Point point;
auto someLambda = [this, &rect, &point](const SomeType& var)
{
if (rect.Contains(point))
{
var.Something();
}
this->MemberFunction();
};
Run Code Online (Sandbox Code Playgroud)
这样或那样做有什么好处吗?我曾与之合作的人曾提到过使用"全部捕获" [&]版本的价格更贵,但我找不到任何文件来支持这一点.我只想确切地知道,所以我不会让代码变得比它需要的更复杂,或者做一些我不应该做的昂贵的事情.
我需要引用一个尚未定义的结构,因为struct实际上包含了typedef'd函数原型.
例如,
typedef int (MyCallbackFunction)(X * x, void * ctx);
typedef struct CallbackData {
MyCallbackFunction * callback;
void * ctx;
} CallbackData;
typedef struct X {
char a;
int b;
int c;
double d;
CallbackData e;
} X;
Run Code Online (Sandbox Code Playgroud)
实际编写此代码/标头的有效方法是什么?
我有两个程序说proc1和proc2.我在另一个内部调用一个mysql程序.
在proc1中我想将proc2中的值插入到proc1临时表中.proc2返回两列,但我只想在proc1临时表中插入一列.
Proc2的输出如下
Hrs(Timestamp) Status
09:30 IN,OUT,IN,OUT
04:30 IN,OUT
07:30 IN,OUT,IN,OUT
04:25 IN,OUT
Run Code Online (Sandbox Code Playgroud)
Proc1代码
CREATE PROCEDURE Proc1()
BEGIN
DROP TABLE IF EXISTS TempWorkedHrs ;
CREATE TEMPORARY TABLE TempWorkedHrs(WorkedHrs TIMESTAMP);
INSERT INTO TempWorkedHrs(WorkedHrs)
CALL Proc2();
SELECT SUM(WorkedHrs) INTO @TotalHrs
FROM TempWorkedHrs;
END //
Run Code Online (Sandbox Code Playgroud)
当我将值插入proc1中的临时表时,proc2中的第二列对我来说并不重要.
Q1.如何将从过程返回的特定列插入临时表?在我的情况下proc2的第一列.
static void [[used]] foo(void)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但我得到以下内容:
warning: ‘used’ attribute ignored [-Wattributes]
static void [[used]] foo(void)
^
Run Code Online (Sandbox Code Playgroud)
为什么忽略该属性?是否可以将GCC属性用作C++属性?
c++ ×7
c++11 ×4
gcc ×2
android ×1
android-ndk ×1
attributes ×1
c ×1
generics ×1
iterator ×1
java ×1
lambda ×1
map ×1
mysql ×1
mysqli ×1
performance ×1
random ×1
struct ×1
type-traits ×1
wstring ×1