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