【问题标题】:Adding parameters to forward-declared templates向前向声明的模板添加参数
【发布时间】:2016-06-29 21:14:36
【问题描述】:

根据我的previous question,我想做以下事情:

#include <vector>
#include<string>
#include <cstdint>

template<typename T> class Message;

template<> class Message <std::vector<uint8_t>>
{
public:
    const T getKey() { return key; };
    const T getMessage() { return message; };

protected:
    T key;
    T message;
};

但是,IntelliSense 告诉我identifier "T" is undefined"

我做错了什么?

【问题讨论】:

    标签: c++ templates template-specialization


    【解决方案1】:

    您必须在您的专业领域的任何地方将T 替换为std::vector&lt;uint8_t&gt;

    template<> class Message <std::vector<uint8_t>>
    {
    public:
        const std::vector<uint8_t>& getKey() const { return key; };
        const std::vector<uint8_t>& getMessage() const { return message; };
    
    protected:
        std::vector<uint8_t> key;
        std::vector<uint8_t> message;
    };
    

    我还添加了缺少的 const 和参考。

    【讨论】:

    • 也可以添加using T = std::vector&lt;uint8_t&gt;; 声明。