gpt4 book ai didi

c++ - 从专用模板方法调用非专用模板方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:30 24 4
gpt4 key购买 nike

我可以从专用模板方法调用非专用模板方法吗?

这在使用继承时很容易:

class SomeBaseClass {
virtual void DoWork() { /* Do something */ }
};

class SomeClass : public SomeBaseClass {
void DoWork() {
// Do something first
SomeBaseClass::DoWork();
}
};

但是在使用模板时有点不同:

template <class T>
class SomeClass {
void DoWork();
};

template<class T>
void SomeClass<T>::DoWork() { /* Do something */}

template<>
void SomeClass<int>::DoWork() {
// Do something first
DoWork<>(); // Call method from line 8
}

我的通用 DoWork 函数中有很多非常好的代码,我不想重复这些代码。我的专业版只有在使用特定类型时需要执行的额外步骤。

最佳答案

类似于here ,你可以间接地做到这一点:

template <class T>
class SomeClassCommonImpl {
void DoWork();
};

template<class T>
void SomeClassCommonImpl<T>::DoWork() { /* Do something */}

template <class T>
class SomeClass: public SomeClassCommonImpl<T> {
// use the default implementation
};

template <>
class SomeClass<int>: public SomeClassCommonImpl<int> {
void DoWork();
};

template<>
void SomeClass<int>::DoWork() {
// Do something first
SomeClassCommonImpl<int>::DoWork<>(); // Call the common method
}

关于c++ - 从专用模板方法调用非专用模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280944/

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