隐式转化的问题

pengxn 2010-02-05 03:44:53
int kkk(int b)
{
cout<<" = "<<b<<endl;
}

int main()
{
kkk(1);
kkk(1234567890123456);//避免被调用到
}


代码中不希望long型数据能调用到这个接口。

如果写这个 接口 可以只被int 型用到这个接口,而其他类型用不到
...全文
146 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallening 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hai040 的回复:]
模板,看5l前怎么没想到
template <class T>
void f(T a) {a.error;}
template <>
void f(int a) {/*...*/}
[/Quote]

无语
pengxn 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xboy 的回复:]
int kkk(int b)
{
cout < <" int:" < <b < <endl;
return 1;
}
int kkk(long int b)
{
cout < <"  long:" < <b < <endl;

return 1;
}
int main()
{
int i=1;
long int li = 1234567890123456;
kkk(i);
kkk(li);//避免被调用到
}
[/Quote]
佩服佩服
xboy 2010-02-05
  • 打赏
  • 举报
回复
int kkk(int b)
{
cout<<" int:"<<b<<endl;
return 1;
}
int kkk(long int b)
{
cout<<" long:"<<b<<endl;

return 1;
}
int main()
{
int i=1;
long int li = 1234567890123456;
kkk(i);
kkk(li);//避免被调用到
}
traceless 2010-02-05
  • 打赏
  • 举报
回复
template <class Type>    //相当于标志,“阻止编译”
void Cmp(Type n, Type cmp)
{

}

template <class Type>
Type kkk(Type n)
{
cout<<" = "<<n<<endl;
Cmp(n, 0); //加了这个可保证编译不过
return 1;
}

int main()
{
int n = 10;
long l = 13;
kkk(n);
//kkk(l); //编译不过
}
traceless 2010-02-05
  • 打赏
  • 举报
回复
Faint~~~

还有这种要求,执行避免多好,居然要编译不过的要求。。。
joey_zoy 2010-02-05
  • 打赏
  • 举报
回复
额。。c++0x中的静态断言可以解决...但是很多编译器都还不支持
pengxn 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 macrojj 的回复:]
C/C++ codetemplate<typename T>int kkk(T b)
{
cout<<"wrong"<<endl;return0;
}

template<>int kkk<int>(int b)
{
cout<<"right"<<endl;return0;
}int main()
{
kkk(1);
kkk(1234567890123456);//避免被调用到}


[/Quote]

谢谢,这个方案的确可以区分开INT和其他类型的区别。

我希望是其他的接口在代码中就编译不过,可以实现吗
groovy2007 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hai040 的回复:]
模板,看5l前怎么没想到
template <class T>
void f(T a) {a.error;}
template <>
void f(int a) {/*...*/}
[/Quote]
妙啊,高手!
macrojj 2010-02-05
  • 打赏
  • 举报
回复
template<typename T >
int kkk(T b)
{
cout<<"wrong"<<endl;
return 0;
}

template<>
int kkk<int>(int b)
{
cout<<"right"<<endl;
return 0;
}

int main()
{
kkk(1);
kkk(1234567890123456);//避免被调用到
}


飞天御剑流 2010-02-05
  • 打赏
  • 举报
回复
重载或者模板加typeid都可以。
pengxn 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 healer_kx 的回复:]
调不到了。。。

C/C++ codeint kkk(int b)
{
cout<<" ="<<b<<endl;return0;
}int kkk(__int64 a)
{return0;
}int main()
{
kkk(1);
kkk(1234567890123456);//避免被调用到}
[/Quote]

不止希望long型其他类型我也希望调用不到,难道每个都写一个?有没有别的办法
lvp1984 2010-02-05
  • 打赏
  • 举报
回复
模板,特化一个int的版本
hai040 2010-02-05
  • 打赏
  • 举报
回复
模板,看5l前怎么没想到
template <class T>
void f(T a) {a.error;}
template <>
void f(int a) {/*...*/}
nobody@noone 2010-02-05
  • 打赏
  • 举报
回复
重载吧,其他方法都不太好
healer_kx 2010-02-05
  • 打赏
  • 举报
回复
调不到了。。。



int kkk(int b)
{
cout<<" = "<<b<<endl;
return 0;
}

int kkk(__int64 a)
{
return 0;
}

int main()
{
kkk(1);
kkk(1234567890123456);//避免被调用到
}

yitaohust 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengxn 的回复:]
引用 1 楼 yitaohust 的回复:
直接在kkk函数内部开头就做个判断


你试这判断一下
[/Quote]
噢,想当然了。确实不能直接比较。拷贝传值的话,直接就被类型转换,已经物是人非了。
听大侠们思路吧。
joey_zoy 2010-02-05
  • 打赏
  • 举报
回复
重载一个long的版本
taodm 2010-02-05
  • 打赏
  • 举报
回复
呃,用重载呀。
当然,如果你能力够,可以用模板的元编程技术。
pengxn 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yitaohust 的回复:]
直接在kkk函数内部开头就做个判断
[/Quote]

你试这判断一下
pengxn 2010-02-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 traceless 的回复:]
LZ呀 给例子也要给个靠谱的嘛 1234567890123456。。。
[/Quote]
这个例子就很靠谱啊
加载更多回复(2)

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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