封装C++模板

encapsulate C++ templates

本文关键字:模板 C++ 封装      更新时间:2023-10-16

我尝试使用显式模板规范实现模板。模板及其实现如下所示:

template <typename T>
class MyClass {
private:
T data;
size_t size;
public:
MyClass();
~MyClass();
uint32_t getSize();
T getData();
void setData(T value);
};
template <class T>
MyClass<T>::MyClass()
{
size = sizeof(T);
}
template <>
MyClass<std::string>::MyClass()
{ 
size = 0;
}
/* and so on */

现在,当我的显式声明还包含一个类模板时,我遇到了问题。比方说,我会创建一个向量的显式模板专用化(包含任何原始类型,如 int、char、float,...(,并将元素站点存储在size变量中。

template <??>
MyClass<std::vector<?>>::MyClass()
{ 
size = sizeof(?);
}

我该怎么做?

你应该专门化类,而不是方法:

#include <string>
#include <vector>
template <typename T>
class MyClass {
private:
T data;
size_t size;
public:
MyClass();
~MyClass();
uint32_t getSize();
T getData();
void setData(T value);
};
template <class T>
MyClass<T>::MyClass()
{
size = sizeof(T);
}
template <>
MyClass<std::string>::MyClass()
{ 
size = 0;
}
template<class T>
class MyClass<std::vector<T>>
{
MyClass();
T data;
size_t size;
};
template<class T>
MyClass<std::vector<T>>::MyClass()
{ 
size = sizeof(T);
}