我今天遇到了麻烦......我想定义一个小模板助手类:
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函数中 - 所以现在我的问题也就是为什么?!
答案 0 :(得分:2)
似乎在这里工作正常,C2027的信息是什么?您使用的编译器是什么?
答案 1 :(得分: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
尚未完全定义。
答案 2 :(得分:1)
不确定问题的正确答案是什么,但似乎你可以通过让iSize成为成员并让GetElementSize()返回它而不是再次调用sizeof来解决它。