日期:2011-03-22 13:55:00 来源:本站整理
<b>奇技淫巧C++之返回值重载</b>[VC/C++编程]
本文“<b>奇技淫巧C++之返回值重载</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
C++当然是不能仅仅通过返回值重载函数的,但是,我们常常会想:如果支持返回值重载就行了.目前,我就从C++的某个颇受争议的角落,为您发掘一点东西.
假定有这样一个函数:
type getvalue(const DBField& fd);
但是,DBField实际的数据范例关于getvalue来说,并不理解,一个常见的办理筹划是:
template<typename T>
T getvalue(const DBField& fd);
但是,这样当然是一个办法,并且是不错的办法.问题在于,有些时刻我们并不便利供应这个T,比方,是一个运算符重载的时刻.别的,当我们不想过早肯定返回值范例的时刻,我们也不肯意供应这个范例T.办理的办法很简单,供应一个间接层:
string getvalue(const DBField& fd);
int getvalue_int(const DBField& fd);
Result getvalue(const DBField& fd)
{
return Result(fd);
}
看看若何实现Result:
struct Result{
const DBField& fd;
explicit Result(const DBField& f) : fd(f){}
operator string() const { return getvalue_string(fd);}
operator int() const { return getvalue_int(fd);}
};
目前,让我们输出数据:
void print_string(const string& str){...}
void print_int(int i){...}
以下利用:
print_string(getvalue(DBField));
print_int(getvalue(DBField));
当然,把范例写进名字可不是什么漂亮的做法,既然你喜好重载,没问题:
template <typename T>
T getvalue(const DBField& fd);
struct Result{
const DBField& fd;
explicit Result(const DBField& f) : fd(f){}
template<typename T>
operator T() const { return getvalue<T>(fd);}
};
这个办法问题在于,必须在某个完毕点供应具体的范例信息,这也是为什么我们要写两个print而不是直接用cout输出的缘由.但是,话说回来,既然你打算仅仅通过返回值来重载,总要奉告代码,返回值是什么吧?
这里展示了怠惰计算的本领,通过一个间接层,把真正的计算时刻耽误到必须的时刻.大概你对返回值重载不屑一顾,但是这个本领是非常有效的.下一次,我将用怠惰计算的办法,展示另一种本领.
#include <iostream>
#include <string>
using namespace std;
string getvalue_slow(const int&)
{
return "getvalue_slow";
}
string g_fast = "getvalue_fast";
const char* getvalue_fast(const int&)
{
return g_fast.c_str();
}
struct Result
{
const int& i;
explicit Result(const int& r) : i(r){}
operator string() const{ return getvalue_slow(i);}
operator const char* () const { return getvalue_fast(i);}
};
Result getvalue(const int& i)
{
return Result(i);
}
void print_const(const char* str)
{
cout << str << endl;
}
void print(const string& str)
{
cout << str << endl;
}
int main()
{
print(getvalue(1));
print_const(getvalue(1));
}
以上是“<b>奇技淫巧C++之返回值重载</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论