我对使用类size
的静态类成员SizeObj
时遇到问题,该成员用作模板类SizeTemplate
的模板参数。请参阅下面的代码段,我将其减少到最低限度。
事实上,下面的代码运行良好,直到MS VS2008,但现在编译失败了 用VS2010编译时。将显示以下错误消息:
error C2275: 'K' : illegal use of this type as an expression
error C2228: left of '.size' must have class/struct/union
需要说明的是,如果getSize
方法是,则编译失败
至少打了一次电话。
请不要问下面的代码是什么意思,正如我说的那样把它减少到了 必要的最低要解释。但是,我需要承认 使用会员的大小'由于几个原因而且可能不是很优雅 有很多更好的解决方案,但目前,我没有任何选择 保持这样。
你知道这里可能有什么问题吗?是否有可能通过构建来解决这个问题 设置或类似的东西?我还没有发现任何合适的东西。
在以下帖子中很容易,因为K类的实例可用,但对于我的问题,我不知道如何正确地获取该实例:
//myTemplate.h
class SizeObj
{
public:
static const int size = 1;
};
template<class K>
class SizeTemplate
{
public:
int getSize();
};
template<class K>
int SizeTemplate<K>::getSize()
{
return K.size;
}
//main.cpp
int main(...)
{
SizeTemplate<SizeObj> sizeObj;
printf("size:%d", sizeObj.getSize());
}
提前多多谢谢你!
tangoal
答案 0 :(得分:1)
与Java不同,在C ++中,您不能在类上使用点运算符,您需要使用范围解析运算符(即::
)从类范围内获取内容(例如size
静态变量),所以用return K.size
return K::size
同样将方法标记为constexpr
可能会对此有所帮助。