gpt4 book ai didi

c++ - 在 C++ 中专门化函数时调用函数的非专门化版本?

转载 作者:可可西里 更新时间:2023-11-01 15:22:11 25 4
gpt4 key购买 nike

假设我有一个模板类:

template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};

我想专门化 do_something,但我想在其中调用“正常”的 do_something 函数:

template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}

有没有办法在我的专用函数中引用普通版本的 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...
}
};

然后为前奏定义一个特化:

template<>
void foo<MyObj>::prelude(MyObj &obj){
// do something specific
}

这在结构上与 main use case for private virtual members 有点相似. (有点。不完全是。但这正是我在这个答案中受到启发的原因。)

关于c++ - 在 C++ 中专门化函数时调用函数的非专门化版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4099204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com