Jac*_*b B 11 c++ templates template-specialization
说我有一个模板类:
template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};
Run Code Online (Sandbox Code Playgroud)
我想专门化do_something,但在其中我想调用"普通"do_something函数:
template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在我的专用函数中引用do_something的正常版本?或者我只需要复制代码?
(我知道我可以用这样的方式重构foo,我不会遇到这个问题,但实际上我无法真正修改"真正的"foo,因为它是重度共享的代码.)
不.您的专业化是MyObj类型参数的唯一定义.但是,请考虑以这种方式修改foo模板,这对模板的当前用户是透明的:
template<typename T>
class foo {
void prelude(T &obj){ // choose a better name
/* do nothing */
}
void do_something(T obj){
prelude(obj);
// do something generic...
}
};
Run Code Online (Sandbox Code Playgroud)
然后为前奏定义一个专门化:
template<>
void foo<MyObj>::prelude(MyObj &obj){
// do something specific
}
Run Code Online (Sandbox Code Playgroud)
这在结构上与私有虚拟成员的主要用例有些相似.(排序.不是真的.但这是启发我的答案.)
归档时间: |
|
查看次数: |
877 次 |
最近记录: |