我创建了一个接受函数指针的函数,例如
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不应该用于函数指针 - 这意味着它是否只适用于对象指针?
我正在使用开始一个线程AfxBeginThread.这将返回指向新CWinThread对象的指针.
MSDN声明此指针为NULL,如果线程创建失败,它将解除所有内容.但是,只要线程在定期启动后退出,CWinThread对象仍然存在.我不确定是否应删除该CWinThread对象,或者是否由MFC本身完成(虽然它似乎不是这样).
仅供参考,线程不可能退出,因为它应该运行直到应用程序结束.但是,因为我使用它作为线程池的一部分,我不希望CWinThread永远挂起aorund.
当您使用 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#int-List的问题.例如,我(12, 65, 312, 52, 312, 85, 14)在列表中有7个值.值可能不止一次出现(在这种情况下,它是值312).
首先,我使用'list.Sort()'对List进行排序.然后我的目标是,我得到一个新列表,其中包含仅存在一次的每个值.在这种情况下,新列表将是(12, 14, 52, 65, 85).
我不明白我怎么能这样做.
我正在使用Windows MFC应用程序.我正在准备我的设计中的报告列表,我CListCtrl可以列出文件的名称,大小,类型和修改日期.我不知道如何显示文件的大小.有谁知道怎么做?
我第一次同时使用模板和指向成员函数的指针,我偶然发现了以下问题.
我为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)