avatar
问一个C++ template的问题# Programming - 葵花宝典
z*p
1
我在写一个generic 的函数比较两个class是否相等, 其中一个相等条件是这两个
class的ID 相同,可不可以在template里要求传入的类型必须有ID这个member
variable呢?怎样才能做得到呢?
谢谢
avatar
c*a
2
one way i can think is let every class inheredited from
a base class with id variable in it, and in your function
you use base class to do comparison

【在 z****p 的大作中提到】
: 我在写一个generic 的函数比较两个class是否相等, 其中一个相等条件是这两个
: class的ID 相同,可不可以在template里要求传入的类型必须有ID这个member
: variable呢?怎样才能做得到呢?
: 谢谢

avatar
z*p
3
Yes, this is one solution. However, the project is close to the end. The
design change is impractical at this stage.
Thanks.

【在 c*******a 的大作中提到】
: one way i can think is let every class inheredited from
: a base class with id variable in it, and in your function
: you use base class to do comparison

avatar
c*t
4
It is a template... You just assume the functions / data members exist.
It is the responsibility of the classes this template uses to have
the functions / data member.

【在 z****p 的大作中提到】
: 我在写一个generic 的函数比较两个class是否相等, 其中一个相等条件是这两个
: class的ID 相同,可不可以在template里要求传入的类型必须有ID这个member
: variable呢?怎样才能做得到呢?
: 谢谢

avatar
z*e
5
1. You can dynamic-cast the in object to target types. If it fails, do
nothing. Otherwise, get the id from the casted type.
2. If there is no target type known-in-advance, for example you don't want
to list all possible target types or it is created by third party, you can
use template constrain in definition. Some thing like this:
bool Comparer (T t1, T t2) where T : IIDBase
{
return t1.Equals(t2);
}
IIDBase is the interface:
Interface IIDBase
{
int GetID();
}
Then derive a

【在 z****p 的大作中提到】
: 我在写一个generic 的函数比较两个class是否相等, 其中一个相等条件是这两个
: class的ID 相同,可不可以在template里要求传入的类型必须有ID这个member
: variable呢?怎样才能做得到呢?
: 谢谢

avatar
z*p
6
Thanks, your second solution is exactly what I am looking for. I remember
somewhere I saw this kind of specification, but forget it.

【在 z***e 的大作中提到】
: 1. You can dynamic-cast the in object to target types. If it fails, do
: nothing. Otherwise, get the id from the casted type.
: 2. If there is no target type known-in-advance, for example you don't want
: to list all possible target types or it is created by third party, you can
: use template constrain in definition. Some thing like this:
: bool Comparer (T t1, T t2) where T : IIDBase
: {
: return t1.Equals(t2);
: }
: IIDBase is the interface:

avatar
t*t
7
what about just use
std::tr1::is_same::value

【在 z****p 的大作中提到】
: 我在写一个generic 的函数比较两个class是否相等, 其中一个相等条件是这两个
: class的ID 相同,可不可以在template里要求传入的类型必须有ID这个member
: variable呢?怎样才能做得到呢?
: 谢谢

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。