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::any
或boost::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>:只允许使用静态数据成员模板的主要内容,如果未能解决你的问题,请参考以下文章
c++template中typename 和class有啥区别?
我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?