0

我今天遇到了一个障碍......我想定义一个小的模板化帮助器类:

template<class T>
CMyClass
{
public : 
    CMyClass() { size_t iSize = sizeof(T); } // Allowed. 
    size_t GetElementSize() const { return sizeof(T); } // C2027.
}; 

当然,它不会编译(C2027)。我的问题是,是否可以获得类型的大小?我需要这个的原因是构造对象的类型可能是许多不同定义的结构,因此我需要在运行时获取所用结构的大小。

通过一些快速的实验,因为我很固执,似乎我可以在 ctor 中使用 sizeof(T) ,但不能在非 ctor 函数中使用 - 所以我现在的问题是......为什么?!

4

3 回答 3

2

似乎在这里工作正常,C2027 的信息是什么?你使用的是什么编译器?

于 2009-08-24T16:44:55.557 回答
2

它可能有不同的原因。考虑这段代码:

// file foo.h
class X;

template<class T>
class CMyClass
{
public : 
    CMyClass() { size_t iSize = sizeof(T); } // Allowed. 
    size_t GetElementSize() const { return sizeof(T); } // C2027.
};

struct Class {
  Class(); // definition of it in the cpp file, where "X" is fully defined
  void callit() { cm.GetElementSize(); } // instantiated here!
  CMyClass<X> cm;
};

在构造函数被实例化时(在“.cpp”文件中),T是一个完全定义的类型。但在GetElementSize被实例化的时候(在“.h”文件中),X还没有完全定义。

于 2009-08-24T18:31:54.530 回答
1

不确定您的问题的正确答案是什么,但似乎您可以通过使 iSize 成为成员并让 GetElementSize() 返回它而不是再次调用 sizeof 来解决它。

于 2009-08-24T16:43:58.180 回答