template<typename T>:只允许使用静态数据成员模板

Posted

技术标签:

【中文标题】template<typename T>:只允许使用静态数据成员模板【英文标题】:template<typename T>: only static data member templates are allowed 【发布时间】:2018-07-12 02:52:42 【问题描述】:
class value 
    template<typename T> T value_1;
    float value_2;

public:
    template<typename T> void Set1(T first) 
        value_2 = (float)0;
        value_1 = first;
    

    void Set2(float second) 
        value_2 = second;
    

    float Get2() 
        return this->value_2;
    

    template<typename T> T Get1() 
        return value_1;
    
;

Value_1 给出一个错误,说只允许静态数据成员模板。有没有办法在没有类型的情况下保留value_1

【问题讨论】:

想一想:如果不知道T,您将如何创建此类的对象?这是不可能的。一种解决方案是将整个类设为模板。 【参考方案1】:

必须知道非静态数据成员的类型。否则,sizeof(value) 是什么?

要存储任意类型的值,您可以使用std::anyboost::any

用途:

class value 
    std::any value_1;
    float value_2;

public:
    template<typename T> void Set1(T first) 
        value_2 = (float)0;
        value_1 = first;
    

    void Set2(float second) 
        value_2 = second;
    

    float Get2() 
        return this->value_2;
    

    template<typename T> T Get1() 
        return std::any_cast<T>(value_1);
    
;

【讨论】:

以上是关于template<typename T>:只允许使用静态数据成员模板的主要内容,如果未能解决你的问题,请参考以下文章

typename T和class T区别与联系

c++template中typename 和class有啥区别?

我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?

我可以将单个模板<typename T> 应用于多个定义/声明吗?

Template_5模板拾遗1

什么是模板<typename T, T t> 习语?