目前,我正在使用 wxWidgets 的 wxGenericDirCtrl,它为我提供了目录树的用户界面。它看起来像这样:
但是,我希望它看起来像这样:
在与 wxWidgets 开发人员交谈时,他们建议一种好的方法是修改 wxGenericDirCtrl 类以使用本机 Windows 目录控件。我想自己将此功能贡献给 wxWidgets,但我不确定从哪里开始,并且可以使用一些建议来帮助我开始。
问题:
我正在寻找一个C++容器类,这很像多图,但略有不同.容器将存储成对的字符串.但是当我使用键K从容器中检索项目时,我想找到K以项目自己的键开头的所有项目.
EG如果我使用键"abcde",我想找到带有"adc"和"abcde"键的项目,而不是"abcqz".
或者以伪C++形式:
multimap2<string, string> myMultiMap;
myMultiMap.insert( pair("abcde", "hello"));
myMultiMap.insert( pair("abc", "Hi"));
myMultiMap.insert( pair("abcqz", "goodbye"));
// prints 2
cout << myMultiMap.count("abcde") << endl;
// prints "hello" and "Hi"
cout << myMultiMap.everything_which_matches("abcde") << endl;
// prints "Hi"
cout << myMultiMap.everything_which_matches("abc") << endl;
// prints "goodbye"
cout << myMultiMap.everything_which_matches("abcqz") << endl;
Run Code Online (Sandbox Code Playgroud)
插入时间并不重要,但我需要快速访问这些项目.是否可以通过创建一个特殊的<运算符来使用普通的Multimap执行此操作?我的预感是我需要普通的<操作符进行插入,还需要一个特殊的操作符进行检索.
谢谢
雨果
我需要根据4个字符的字符串进行切换.我把字符串放在一个联合中,所以我至少可以把它称为32位整数.
union
{
int32u integer;
char string[4];
}software_version;
Run Code Online (Sandbox Code Playgroud)
但现在我不知道在案例陈述中写什么.我需要某种宏来将4个字符的字符串文字转换为整数.例如
#define STRING_TO_INTEGER(s) ?? What goes here ??
#define VERSION_2_3_7 STRING_TO_INTEGER("0237")
#define VERSION_2_4_1 STRING_TO_INTEGER("0241")
switch (array[i].software_version.integer)
{
case VERSION_2_3_7:
break;
case VERSION_2_4_1:
break;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法制作STRING_TO_INTEGER()宏.或者有更好的方法来处理交换机?
我有一个MyClass向量,其中MyClass是一个大类.当我做:
vector<MyClass> vec;
vec.push_back(MyClass(a,b,c));
Run Code Online (Sandbox Code Playgroud)
这似乎效率很低,因为创建了一个临时的MyClass,将其复制到向量中,然后进行了破坏.
有没有办法在第一个地方使用placement new直接在vector中创建类?我不能这样做:
vector<MyClass> vec;
vec.resize(1);
new(&vec.data[0]) MyClass(a,b,c);
Run Code Online (Sandbox Code Playgroud)
因为vec.resize(1)调用了MyClass构造函数.是否有某种方法可以调整向量的大小而不调用所有新项的构造函数,或者是否可以在下一个可用位置将MyClass直接构造到向量中?
这是C++ lambda 的寿命是否有限的后续问题?。
在我之前的问题中,尝试在 lambda 超出范围后使用它会导致崩溃。虽然这并不奇怪,但我认为我使用了 lambda 存储位置的错误思维模型,这让我认为它永远存在,即使它超出了范围。
也许是因为我经常使用微控制器,其中代码从非易失性闪存执行,这与数据存储器(例如堆栈)完全分开。但我想象创建 lambda 相当于显式编写一个独立函数,但语法更方便。IE:
void SaySomething()
{
cout << "Hello" << endl;
}
int main()
{
AcceptFunction([](){cout << "Hello" << endl;}); // I thought that this
AcceptFunction(SaySomething); // was the same as this
}
Run Code Online (Sandbox Code Playgroud)
我想象的是 lambda 编译为与其他非 lambda 代码一起静态存在的实际代码,并AcceptFunction传递一个指向该代码的指针。在这种情况下,该代码将始终存在于内存中,即使 lambda 超出范围也是如此。
但我的程序崩溃了,所以这不可能是真的。那么该代码在哪里?它在堆栈上吗?如果是这样,在具有闪存的架构(代码无法从堆栈中运行)上,行为是否会有所不同?
更新
请注意,这个问题是关于 lambda 的物理存储位置。我不希望行为有所不同,也不希望 lambda 的析构函数不被调用。