p****o 发帖数: 1340 | 1 我定义了一个模板类:
template class myclass
{
typedef T datatype;
...
};
我希望当使用myclass的时候,这个datatype
的定义不是T,而是一个另外的类型S。我的问题是这个
是不是可行的?如果可以的话,syntax是什么呢?
我可以用full specialization的,不过这个类有好多
函数的,所以不想这样搞。google了半天也未果。
谢了! |
p***o 发帖数: 1252 | 2
搞个traits,就是说把上面那个typedef T datatype换成
typedef typename traits::datatype datatype,然后full/partial
specialization traits这个类:
template class traits{typedef T datatype;};
【在 p****o 的大作中提到】 : 我定义了一个模板类: : template class myclass : { : typedef T datatype; : ... : }; : 我希望当使用myclass的时候,这个datatype : 的定义不是T,而是一个另外的类型S。我的问题是这个 : 是不是可行的?如果可以的话,syntax是什么呢? : 我可以用full specialization的,不过这个类有好多
|
t****t 发帖数: 6806 | 3 不管是partial specialization还是full specialization,类都要重写过.
你倒是可以试着把datatype做成模板,比如说:
template struct datatype_trait
{
typedef T1 data_type;
};
template <> struct datatype_trait
{
typedef S data_type;
};
template class myclass
{
typedef typename datatype_trait::data_type datatype;
...
};
【在 p****o 的大作中提到】 : 我定义了一个模板类: : template class myclass : { : typedef T datatype; : ... : }; : 我希望当使用myclass的时候,这个datatype : 的定义不是T,而是一个另外的类型S。我的问题是这个 : 是不是可行的?如果可以的话,syntax是什么呢? : 我可以用full specialization的,不过这个类有好多
|
p****o 发帖数: 1340 | 4 可以不完全重写的:只用改几个函数了。我也在看这个
data_trait的东东。。。
【在 t****t 的大作中提到】 : 不管是partial specialization还是full specialization,类都要重写过. : 你倒是可以试着把datatype做成模板,比如说: : template struct datatype_trait : { : typedef T1 data_type; : }; : template <> struct datatype_trait : { : typedef S data_type; : };
|
p***o 发帖数: 1252 | 5 还是你快一步 ... 呵呵
【在 t****t 的大作中提到】 : 不管是partial specialization还是full specialization,类都要重写过. : 你倒是可以试着把datatype做成模板,比如说: : template struct datatype_trait : { : typedef T1 data_type; : }; : template <> struct datatype_trait : { : typedef S data_type; : };
|
t****t 发帖数: 6806 | 6 ping
【在 p***o 的大作中提到】 : 还是你快一步 ... 呵呵
|
t****t 发帖数: 6806 | 7 explicit specialization of a member of class template may be provided,
however they must be fully specialized. in other words, if you partial
specialize a class, you must rewrite everything.
BTW, your case is not called "partial specialization". partial
specialization will still have template parameter. if you specialize for T->
char*, then it's not partial (all parameter have values)
【在 p****o 的大作中提到】 : 可以不完全重写的:只用改几个函数了。我也在看这个 : data_trait的东东。。。
|
p****o 发帖数: 1340 | 8 thanks a lot. i'll read and think a bit more, :)
->
【在 t****t 的大作中提到】 : explicit specialization of a member of class template may be provided, : however they must be fully specialized. in other words, if you partial : specialize a class, you must rewrite everything. : BTW, your case is not called "partial specialization". partial : specialization will still have template parameter. if you specialize for T-> : char*, then it's not partial (all parameter have values)
|