在调用模板类成员

时间:2017-06-28 10:21:16

标签: c++ visual-studio visual-studio-2010 templates visual-studio-2008

我对使用类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

1 个答案:

答案 0 :(得分:1)

与Java不同,在C ++中,您不能在类上使用点运算符,您需要使用范围解析运算符(即::)从类范围内获取内容(例如size静态变量),所以用return K.size

替换return K::size

同样将方法标记为constexpr可能会对此有所帮助。