小编Ale*_*lex的帖子

将nullptr分配给函数指针变量是否安全?

我创建了一个接受函数指针的函数,例如

typedef CString(*GetLabelFunc)(const CSomeObject* const pObject);

void DoSomething(GetLabelFunc funcGetLabel);
Run Code Online (Sandbox Code Playgroud)

该函数可能会收到一个空指针,并在这种情况下返回一个空字符串.当使用NULL和nullptr作为参数时,这在MSVC++ 2010中完全正常 - 但我不认为在这种特殊情况下成功编译是一个安全港...

现在我想知道传递nullptr是否等同NULL于函数指针.我之所以要问的是,例如void*不接受函数指针(或者至少它不应该被使用).所以也许有类似的原因,nullptr不应该用于函数指针 - 这意味着它是否只适用于对象指针?

c++ function-pointers c++11

8
推荐指数
1
解决办法
2332
查看次数

在AfxBeginThread创建之后谁拥有CWinThread?

我正在使用开始一个线程AfxBeginThread.这将返回指向新CWinThread对象的指针.

MSDN声明此指针为NULL,如果线程创建失败,它将解除所有内容.但是,只要线程在定期启动后退出,CWinThread对象仍然存在.我不确定是否应删除该CWinThread对象,或者是否由MFC本身完成(虽然它似乎不是这样).

仅供参考,线程不可能退出,因为它应该运行直到应用程序结束.但是,因为我使用它作为线程池的一部分,我不希望CWinThread永远挂起aorund.

c++ mfc

6
推荐指数
1
解决办法
4359
查看次数

如何使用 NUnit 测试回调

当您使用 NUnit 测试回调时,是否有任何特殊支持?或者某种比我下面的解决方案更好的“最佳实践”?

我刚刚开始编写一些测试和方法,所以我仍然可以完全控制 - 但是我认为如果有更好的方法来彻底测试回调可能会很烦人,尤其是在复杂性增加的情况下。所以这是我现在如何测试的一个简单示例:

要测试的方法使用一个委托,该委托调用回调函数,例如,一旦在流中发现新的 xml 元素。出于测试目的,我将NewElementCallback方法传递给委托,并在调用函数时将参数内容存储在某些测试类属性中。我用于断言的这些属性。(当然他们正在测试设置中被重置)

[Test]
public void NewElement()
{
    String xmlString = @"<elem></elem>";

    this.xml.InputStream = new StringReader(xmlString);
    this.xml.NewElement += this.NewElementCallback;

    this.xml.Start();

    Assert.AreEqual("elem", this.elementName);
    Assert.AreEqual(0, this.elementDepth);
}

private void NewElementCallback(string elementName, int elementDepth)
{
    this.elementName = elementName;
    this.elementDepth = elementDepth;
}
Run Code Online (Sandbox Code Playgroud)

c# delegates nunit unit-testing callback

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

从列表中获取仅在C#中存在一次的值

我有一个C#int-List的问题.例如,我(12, 65, 312, 52, 312, 85, 14)在列表中有7个值.值可能不止一次出现(在这种情况下,它是值312).

首先,我使用'list.Sort()'对List进行排序.然后我的目标是,我得到一个新列表,其中包含仅存在一次的每个值.在这种情况下,新列表将是(12, 14, 52, 65, 85).

我不明白我怎么能这样做.

c# list

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

查找文件大小窗口MFC应用程序

我正在使用Windows MFC应用程序.我正在准备我的设计中的报告列表,我CListCtrl可以列出文件的名称,大小,类型和修改日期.我不知道如何显示文件的大小.有谁知道怎么做?

windows mfc filesize

2
推荐指数
1
解决办法
4436
查看次数

MFC中如何将BYTE数组转换为CString?

如何在 MFC 中将 BYTE 数组转换为 CString?

c++ string mfc

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

使用模板函数指针声明模板函数

我第一次同时使用模板和指向成员函数的指针,我偶然发现了以下问题.

我为typedef声明了一个struct Proxy,因为templates和typedef不能一起工作(我知道这应该可以在C++ 11中使用,但MSVC++不接受它).现在我想声明一个模板(!)函数,该函数使用带有模板类型的代理.这是编译时导致错误的原因.请看下面的(简化)代码,我添加了一些示例来澄清问题.

我正在使用标准的VC++ 2010(没有CLR/CLI).

template<typename T>
struct Proxy
{
    typedef bool (CClass::*MethodPtr)(const T* const objectX);
}

class CClass
{
    // warning: dependent name is not a type
    // error:: Method can not be a template definition
    template<typename T>
    bool Method( Proxy<T>::MethodPtr );

    // this works, but i want to specify T instead of int of course
    template<typename t>
    bool method( Proxy<int>::MethodPtr );

    // this is what i use
    template<typename T>
    bool Method( bool (CClass::*MethodPtr)(const T* const objectX) ); …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers visual-c++

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