封装C ++模板

问题描述 投票:0回答:1

我尝试使用明确的模板规范来实现模板。模板及其实现如下所示:

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(?);
}

我该怎么做?

c++ templates c++14
1个回答
0
投票

您应该专注于类,而不是方法:

#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);
}
© www.soinside.com 2019 - 2024. All rights reserved.