【发布时间】:2020-04-15 02:50:17
【问题描述】:
假设以下类:
template <typename T>
class Test {
public:
void do_something1();
...
void do_something100(); // basically many functions already defined
}
如何在不重写所有可能已经模板化的 100 个函数的情况下向类的特化添加另一个函数?
template<>
class Test<int> {
public:
void do_something_else();
}
...
int main() {
auto x = Test<int>();
x.do_something5(); // should be still valid, would call
// Test<T>::do_something5() with T being int
x.do_something_else(); // valid because declared in specialisation
...
}
现在,如果像上面的示例一样保留Test<int> 特化,它将只包含do_something_else(),不包含do_something1...100()。
解决方案
根据接受的答案,使用给定的示例,我执行了以下操作:
namespace parent {
template <typename T>
class Test {
public:
void do_something1();
...
void do_something100();
}
}
template <typename T>
class Test : public parent::Test<T> {
using parent::Test<T>::Test; // inherit constructors
}
template <>
class Test<int> : public parent::Test<int> {
using parent::Test<int>::Test;
public:
void do_something_else();
}
【问题讨论】:
-
不幸的是,C++ 不能以这种方式工作。您将不得不找到一些方法来重新设计您的模板。可能把常用的函数放在父模板类中,在子类中继承,默认实现,还有一些特化。