MST

星途 面试题库

面试题:C++ 类成员初始化默认值设置与模板元编程

利用C++ 的模板元编程,设计一个模板类`MyContainer`,它可以存储不同类型的数据,并具有默认值初始化功能。模板参数`T`表示存储的数据类型,`DefaultValue`表示默认值。要求在编译期完成默认值的初始化,并且能够通过模板特化针对不同类型设置不同的默认初始化逻辑。请实现该模板类并举例说明如何为`int`类型和`std::string`类型分别设置不同的默认值。
14.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <string>

// 模板类MyContainer定义
template <typename T, T DefaultValue>
class MyContainer {
public:
    MyContainer() : data(DefaultValue) {}
    T getData() const { return data; }
private:
    T data;
};

// 模板特化针对std::string类型
template <>
class MyContainer<std::string, std::string()> {
public:
    MyContainer() : data("default string") {}
    std::string getData() const { return data; }
private:
    std::string data;
};

int main() {
    // 使用MyContainer存储int类型,默认值为0
    MyContainer<int, 0> intContainer;
    std::cout << "Int container data: " << intContainer.getData() << std::endl;

    // 使用MyContainer存储std::string类型,默认值为"default string"
    MyContainer<std::string, std::string()> stringContainer;
    std::cout << "String container data: " << stringContainer.getData() << std::endl;

    return 0;
}
  1. 模板类定义
    • 首先定义了一个通用的模板类MyContainer,它有两个模板参数,T表示存储的数据类型,DefaultValue表示默认值。
    • 在类的构造函数中,将成员变量data初始化为DefaultValue,并提供一个getData函数来获取存储的值。
  2. 模板特化
    • 针对std::string类型进行了模板特化。在这个特化版本中,构造函数将data初始化为特定的字符串"default string"
  3. 使用示例
    • main函数中,分别创建了存储int类型和std::string类型的MyContainer对象,并输出它们的默认值。这样就展示了如何利用模板元编程实现不同类型数据的默认值初始化以及针对不同类型设置不同的默认初始化逻辑。