小编bod*_*ydo的帖子

我可以在 std::map 中使用 CComPtr 吗?

我正在用 C++ 在 Windows COM 中编写一个程序,我正在使用CComPtr智能指针。

我找不到答案的问题是 - 我可以CComPtrstd::map.

我有以下代码片段(简化):

std::map<int, CComPtr<IErrorInfo> > ErrorMap;
Run Code Online (Sandbox Code Playgroud)

我希望保持ints 和IErrorInfo错误信息之间的这种映射。

但是,我不确定是否可以执行以下操作:

CComPtr<IErrorInfo> result;
GetErrorInfo(0, &pErrInfo);

ErrorMap.insert(std::make_pair(0, result));
Run Code Online (Sandbox Code Playgroud)

我担心result智能指针的所有权以及它在ErrorMap被销毁时是否会正确释放?

c++ windows com atl smart-pointers

4
推荐指数
1
解决办法
880
查看次数

如何使用HTML :: TreeBuilder找到直接后代?

假设我有一个像这样的HTML树:

div
`- ul
   `- li          (*)
   `- li          (*)
   `- li          (*)
   `- li          (*)
      `- ul
         `- li
         `- li
         `- li
Run Code Online (Sandbox Code Playgroud)

如何选择<li>标有的元素(*)?它们是第一个<ul>元素的直接后代.

以下是我找到第一个<ul>元素的方法:

my $ul = $div->look_down(_tag => 'ul');
Run Code Online (Sandbox Code Playgroud)

现在我有了$ul,但是当我做的事情如下:

my @li_elements = $ul->look_down(_tag => 'li');
Run Code Online (Sandbox Code Playgroud)

它还会找到<li>隐藏在HTML树中更深层的元素.

我如何找到<li>第一个<ul>元素的直接后代的元素?我的数量不详.(我不能只选择前4个例子).

html perl parsing html-tree

4
推荐指数
2
解决办法
2136
查看次数

如何使用Win32 API查找子窗口(3级深)的子窗口的子HWND?

假设我为其中一个进程设置了这个Window层次结构:

Main Window               (class name: XYZ_Widget_1)
`- Child Window           (class name: XYZ_Widget_0)
  `- Child-Child Window    (class name: XYZ_Renderer)
Run Code Online (Sandbox Code Playgroud)

我如何找到HWND Child-Child Window

我尝试FindWindowXYZ_Renderer类上使用Win32 API函数,但该FindWindow函数找不到子窗口.

然后我试图使用FindWindow发现Main Window,它成功了,但使用后FindWindowEx只能找到Child Window作为Child-Child Window是不是一个孩子Main Window.

我想我可以更深入一层并在Child Window找到它之后调用FindWindowEx .

但在我这样做之前,我想可能有一个简单的方法可以找到Child-Child Window

api winapi findwindow findwindowex

4
推荐指数
2
解决办法
2万
查看次数

必须在cmd.exe命令行中转义哪些符号?

我找不到需要在Windows cmd.exe命令行中专门处理的所有符号的列表.

例如,

C:\Users\boda>echo ">"
Run Code Online (Sandbox Code Playgroud)

输出:

">"
Run Code Online (Sandbox Code Playgroud)

C:\Users\boda>echo '>'
Run Code Online (Sandbox Code Playgroud)

不输出任何东西.

同样,这些都不起作用:

C:\Users\boda>echo \'>\'

C:\Users\boda>echo \'\>\'

C:\Users\boda>echo '\>'
Run Code Online (Sandbox Code Playgroud)

有与字符类似的问题|^甚至更多.

有谁知道如何在cmd.exe中使用原始字符串?

windows shell cmd command-line-arguments

4
推荐指数
1
解决办法
1767
查看次数

Python 中处理 AttributeError 的特殊方法是什么?

我应该在我的类中重新定义什么特殊方法,以便它处理AttributeError异常并在这些情况下返回一个特殊值?

例如,

>>> class MySpecialObject(AttributeErrorHandlingClass):
      a = 5
      b = 9
      pass
>>>
>>> obj = MySpecialObject()
>>>
>>> obj.nonexistent
'special value'
>>> obj.a
5
>>> obj.b
9
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索答案,但找不到。

python attributeerror

3
推荐指数
1
解决办法
1835
查看次数

在C++中总是需要调用基类构造函数吗?

假设我有一些类C,我继承它并命名这个类D.我是否总是必须调用C默认构造函数,如下例所示:

class C {
    public:
        C() { ... }
};

class D {
    public:
        D() : C() { ... }
};
Run Code Online (Sandbox Code Playgroud)

请注意,C它只有默认构造函数.我必须从D打电话吗?我无法弄清楚如何找到它.

谢谢,Boda Cydo.

c++ constructor default-constructor

3
推荐指数
1
解决办法
975
查看次数

函数重载是否在C中工作?

可能重复:
C中的函数重载C
是否支持重载?

任何人都可以解释函数重载是否在C中工作?

我尝试过这个并没有用:

#include <stdio.h>

int f(int val) {
    printf("f int\n");
    return 5;
}

int f(char *val) {
    printf("f char *\n");
    return 6;
}

int main() {
    f(5);
    f("moo");
}
Run Code Online (Sandbox Code Playgroud)

gcc C编译器说:

overload.c:8: error: conflicting types for 'f'
overload.c:3: error: previous definition of 'f' was here
Run Code Online (Sandbox Code Playgroud)

但是,如果我在C++中编译相同的代码,它的工作原理.

有人能解释一下吗?

谢谢,Boda Cydo.

c overloading

3
推荐指数
1
解决办法
1036
查看次数

我可以通过for_each <algorithm>在C++中的指针向量上调用`delete`吗?

假设我有一个std::vector<Obj *> objs(出于性能原因,我有指针而不是实际的Objs).

obj.push_back(new Obj(...));反复填充它.

完成后,我必须delete使用推回元素.一种方法是这样做:

for (std::vector<Obj *>::iterator it = objs.begin(); it != objs.end(); ++it) {
    delete *it;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我可以使用for_each算法来做同样的事情,我感兴趣:

#include <algorithm>
...
for_each(objs.begin(), objs.end(), delete);
Run Code Online (Sandbox Code Playgroud)

你怎么看?

c++ memory foreach delete-operator

3
推荐指数
2
解决办法
6934
查看次数

使用CoTaskMemAlloc时,我应该总是调用CoTaskMemFree吗?

我正在编写一些COM和ATL代码,并且出于某种原因,所有代码都使用CoTaskMemAlloc来分配内存而不是newmalloc.所以我遵循这种编码风格,我也使用CoTaskMemAlloc.

我的老师教我永远deletefree分配记忆.但是,CoTaskMemFree如果我使用的话,我不确定是否应该一直打电话CoTaskMemAlloc

com memory-management atl

3
推荐指数
1
解决办法
4766
查看次数

我使用Data :: Dumper在Perl中序列化了我的数据.现在,当我评估它时,我得到"全局符号"$ VAR1"需要显式包名"

我使用Data :: Dumper将我的数据序列化为Perl中的字符串.现在在另一个程序中,我试图通过使用来反序列化它,eval我得到:

Global symbol "$VAR1" requires explicit package name
Run Code Online (Sandbox Code Playgroud)

use warnings; use strict;在我的程序中使用.

以下是我eval的代码:

my $wiki_categories = eval($db_row->{categories});
die $@ if $@;
/* use $wiki_categories */
Run Code Online (Sandbox Code Playgroud)

如何禁止我的程序死亡,因为"$VAR1"没有被声明为my

我应该追加"my "$db_row->{categories}eval?像这样:

my $wiki_categories = eval("my ".$db_row->{categories});
Run Code Online (Sandbox Code Playgroud)

我还没有测试过,但我认为它会起作用.

还有其他方法吗?也许将它包装在某个块中,然后对该块关闭严格?我从来没有这样做,但我已经看到它提到了.

任何帮助赞赏!

perl serialization eval data-dumper

3
推荐指数
2
解决办法
2035
查看次数