繁体   English   中英

模板专业化类型的条件?

[英]Conditions for template specialization type?

我已经根据原始模板类制作了一个专门的模板,如下所示:

基础模板:

template <typename T>
class MyData {
public:
    MyData(T param) : data(param) {}

    T GetData() const {
        return data;
    }

private:
    T data;
};

专业模板:

template <>
class MyData<char*> {
public:
    MyData(const char* param) {
        int len = static_cast<int>(strlen(param));
        data = new char[len + 1];
        strcpy_s(data, static_cast<rsize_t>(len + 1), param);
    }

    ~MyData() {
        delete[] data;
    }

    const char* GetData() const {
        return data;
    }

private:
    char* data;
};

这段代码运行良好,但我想知道模板专业化类型是否有任何明确的条件。 例如,如果我进行函数特化,返回类型和所有参数的类型必须相同。

template <>
const char* Add(const char* pLeft, const char* pRight) {
-----------     -----------        -----------
     |                |                  |
     +----------------+------------------+
    ...
}

MyData类中,类的模板类型是char*但构造const char*的参数类型是const char* 但是,编译代码时没有错误。 所以我想知道在类模板特化中是否有这样的类型条件。

函数专业化和类专业化之间存在差异。 类特化可能是与另一组成员、函数和基类完全不同的类型。 以下编译得很好:

template <typename T>
class Foo
{
public:
    void Bar() {}

private:
    int val;
};

class Parent {};

template <>
class Foo<char> : public Parent
{
public:
    void BarBar() {}

private:
    double val;
};

int main()
{
    Foo<int> f;
    Foo<char> ff;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM