如何实现操作符<<重载的函数模板特化

banjo 2003-08-28 11:06:08
那位高人指点一下?编译器爆出了我不理解的错误
...全文
79 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpho 2003-08-28
  • 打赏
  • 举报
回复

enum FLX_QUERY_MODE{
SimpleMode=0,
RowBindMode=1,
SetBindMode=2,
};

class sss{
public:
bool operator<<(FLX_QUERY_MODE mode){return true;}
template<class _Fn>//接受一个函数指针
bool operator<<(_Fn _Op){
_Op(1);
return true;
}
};
banjo 2003-08-28
  • 打赏
  • 举报
回复
这两个操作符包含在一个类中的
enum FLX_QUERY_MODE
{
SimpleMode=0,
RowBindMode=1,
SetBindMode=2,
};

class sss
{

template<>//接受一个枚举变量,这边该怎么写呢?
是 bool operator<< <FLX_QUERY_MODE>(FLX_QUERY_MODE mode){...};
或者应该是bool operator<< (FLX_QUERY_MODE mode){...};


template<class _Fn>//接受一个函数指针
bool operator<<(_Fn _Op)
{
op(1)
};

}

两种写法在调用时编译器报错了
error C2593: 'operator <<' is ambiguous
hpho 2003-08-28
  • 打赏
  • 举报
回复
class sss
{

bool operator<< (FLX_QUERY_MODE mode){...};

template<class _Fn>//接受一个函数指针
bool operator<<(_Fn _Op)
{
op(1)
};

}
banjo 2003-08-28
  • 打赏
  • 举报
回复
enum FLX_QUERY_MODE
{
SimpleMode=0,
RowBindMode=1,
SetBindMode=2,
};
banjo 2003-08-28
  • 打赏
  • 举报
回复
这两个操作符包含在一个类中的
class sss
{

template<FLX_QUERY_MODE T>//接受一个枚举变量
bool operator<< (T mode){...};

template<class _Fn>//接受一个函数指针
bool operator<<(_Fn _Op)
{
op(1)
};

}
banjo 2003-08-28
  • 打赏
  • 举报
回复
template<FLX_QUERY_MODE T>//接受一个枚举变量
bool operator<< (T mode){...};

template<class _Fn>//接受一个函数指针
bool operator<<(_Fn _Op)
{
op(1)
};



error C2061: syntax error : identifier 'T'
e:\项目\数据库\dbwrap5\dbwrap\flxdb\flxdb.h(269) : error C2805: binary 'operator <<' has too few parameters
sevecol 2003-08-28
  • 打赏
  • 举报
回复
什么情况下扩展主模板?
什么情况下使用特例华?

把你的目的具体讲清楚。
banjo 2003-08-28
  • 打赏
  • 举报
回复
template<>//接受一个函数指针
bool sss::operator<< <_Fn>(_Fn _Op)
{
return _Op(1);
};
而且_Fn _Op
可能为一个仿函数,怎么实现呢?
banjo 2003-08-28
  • 打赏
  • 举报
回复
还是不行啊
我还定义了另外一个
enum FLX_SQL
{
BeginSql=0,
EndSql=1,
};
CFlxQuery& operator<<(FLX_SQL fs);
error C2785: 'bool __thiscall CFlxQuery::operator <<(T)' and 'class CFlxQuery &__thiscall CFlxQuery::operator <<(enum FLX_SQL)' have different return types

banjo 2003-08-28
  • 打赏
  • 举报
回复
还是不行啊
我还定义了另外一个
enum FLX_SQL
{
BeginSql=0,
EndSql=1,
};
CFlxQuery& operator<<(FLX_SQL fs);
error C2785: 'bool __thiscall CFlxQuery::operator <<(T)' and 'class CFlxQuery &__thiscall CFlxQuery::operator <<(enum FLX_SQL)' have different return types

sevecol 2003-08-28
  • 打赏
  • 举报
回复
typedef bool (*_Fn)(int);

enum FLX_QUERY_MODE
{
SimpleMode=0,
RowBindMode=1,
SetBindMode=2,
};

class sss
{
public:
template<typename T>
bool operator<<(T t);
};

template<typename T>
bool sss::operator<<(T t)
{
return true;
};

template<>//接受一个函数指针
bool sss::operator<< <_Fn>(_Fn _Op)
{
return _Op(1);
};
sevecol 2003-08-28
  • 打赏
  • 举报
回复
什么情况下扩展主模板?
什么情况下使用特例华?

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧