当前位置:编程学习 > VC++ >>

VC++编程中的一个问题

我有一个函数取得一个对象(并不是对象的指针),没有这个对象时,大家是怎么返回的, 例如  template<typename T> T get(int index) { if(!find())//没找到 return ??//这里怎么写       else return data[index]; }
追问:你试过吗,别不负责任好吗,我的函数返回值是一个对象,并没有说是一个int你的也不对写成void的就不能返回需要的对象了啊不行,编译都通不过你们都是一样的错误什么意思,好像和我问的不是一回事吧
答案:template<typename T>
     T   get(int index)
       {
                 if(!find())//没找到
                          return ??//这里怎么写
      else
                             return data[index];
            }
\\ 变换一点吧,采用返回指针吧。
template<typename T>
     T*   get(int index)
       {
                 if(!find())//没找到
                          return NULL;                  // use NULL is okay;
      else
                             return &data[index];  // return the pointer of current data;
           }
///// 
当然如果不用指针作为返回值的话,这里有2个问题:
1. 在没找到的时候,return 必须构造一个临时 T 对象,需要调用 T 的构造函数, 构造函数的形式,这个你需要去思考下。
2. 即便是构造完成了,如何区分当前的对象是是查找到的,还是没查找到底默认返回值呢。虽然你可以默认制定某个默认值表示没有查找的含义,但换成指针是不是意思更明确呢?
使用指针,字调用 T* pData = get(); 之后就可以直接
if( NULL != pData)
{
// find the data
}
else
{
 // not find the data
}
判断。


实际上,直接在 find函数中返回当前查找的函数指针就好。get 完全是多余的。
代码如下
template<class _type>
_type* find(size_t index)
{
// do something to find the ....
if (okay) return "what you find";
else return NULL;
}
其他:-1 或者 0 也可以什么都不写,就写一个return;也行,具体要看你是用这个函数做什么东西。 NULL 首先,这种消息机制一般只使用于标准的win32程序。例如Windows的系统对话框,自己编写的一些简单的Win32程序等等。
其次,这个取决于那些程序有没有对这些消息做了什么样的处理。默认情况下,一般win32程序的按钮都会响应这个消息。但是有些程序出于某些目的,会屏蔽这些消息(比如在接受到消息后什么都不做)。

PS: 通过这种发消息的方式控制,对于很多软件都行不通的。例如一般的网游,都直接响应鼠标键盘硬件驱动层面的东西;IE浏览器的话就又涉及到其他一些麻烦的东西了。
 

上一个:vs2005 VC++ sqrt 请问我在vc++里用sqrt时:对重载函数的调用不明确
下一个:vc 设置搜索路径

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,