MST

星途 面试题库

面试题:C++模板类派生新类中的模板参数传递及优化

有两个模板类`template <typename T1, typename T2> class TemplateBase { /*... */ };` 和 `template <typename T3> class TemplateDerived : public TemplateBase<T3, int> { /*... */ };`。在`TemplateDerived`中需要实现一个成员函数`void process(T3 data)`,该函数调用`TemplateBase`中已有的一个成员函数`void baseProcess(T1 data1, T2 data2)`,其中`data2`固定为`5`,`data1`为传入的`data`。请完成`TemplateDerived`类及其成员函数`process`的实现,并说明在这种模板类派生场景下,如何优化代码以提高运行效率和减少代码冗余。
27.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
template <typename T1, typename T2>
class TemplateBase {
public:
    void baseProcess(T1 data1, T2 data2) {
        // 这里添加具体实现
    }
};

template <typename T3>
class TemplateDerived : public TemplateBase<T3, int> {
public:
    void process(T3 data) {
        this->baseProcess(data, 5);
    }
};

优化方式

  1. 减少模板实例化:如果TemplateBase中的某些成员函数不依赖于T2,可以将这些函数提取到一个独立的模板类中,然后让TemplateBase从这个新类派生。这样对于不同的T2,不会重复实例化不依赖T2的函数,减少代码冗余。
  2. 使用constexpr:如果TemplateBase中的baseProcess函数逻辑比较简单,并且在编译期可以确定结果,可以将其声明为constexpr函数。这样在编译期就能完成计算,提高运行效率。
  3. 内联函数:将process函数声明为内联函数,减少函数调用开销。在C++11及以后,可以直接在类定义中定义成员函数,编译器会自动将其视为内联函数(如果符合内联条件)。如上述代码,process函数定义在类内,编译器可能会进行内联优化。