重载结构中的函数:
struct VARIABLE
{
VARIABLE() : ShortName(NULL), MemberAddr(0), Description(NULL), DefaultValue(NULL), ValueSize(0), MemberType(NULL) {}
template<typename U>
VARIABLE(LPCTSTR sName, U const & member, U const & default, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<U>())
, SizeAddr(0), SizeType(NULL)
{
SetDefault(default);
}
template<typename U>
VARIABLE(LPCTSTR sName, U const & member, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<U>())
, SizeAddr(0), SizeType(NULL)
{}
template<typename T, typename U>
VARIABLE(LPCTSTR sName, NWArray<U> const & member, T const & size, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<NWArray<U> >())
, SizeAddr((LPCBYTE)&size - (LPCBYTE)0), SizeType(new VTYPE<T>())
{}
~VARIABLE() {
if (ValueSize && DefaultValue) {
delete DefaultValue; DefaultValue = NULL; ValueSize = 0;
}
if (MemberType) {
delete MemberType; MemberType = NULL;
}
}
template<typename U> void SetDefault(U default) { ValueSize = sizeof(U); DefaultValue = new U(default); }
template <typename U> const U& GetDefault() const { return *(U*)DefaultValue; }
LPCTSTR ShortName;
intptr_t MemberAddr;
TYPE *MemberType;
LPCTSTR Description;
LPVOID DefaultValue;
DWORD ValueSize;
DWORD SizeAddr;
TYPE *SizeType;
};
#define INITVARTYPE(T) \
T() { ::Init(this->GetInfDefmap(), (LPVOID)this); } \
#define BEGIN_INI_MAP_NOINIT(T) \
LPCSTR GetTypeName() const { return #T; } \
void *GetMember(const VARIABLE* memptr) const { return (void*)(((char*)this) + memptr->MemberAddr); } \
const VARIABLE* GetInfDefmap() const { return InternalGetInfDefmap(); } \
static VARIABLE* InternalGetInfDefmap() { \
const T* pThis = 0; static VARIABLE map[] = { \
#define BEGIN_INI_MAP(T) \
INITVARTYPE(T) \
BEGIN_INI_MAP_NOINIT(T) \
#define END_INI_MAP() \
VARIABLE() };\
return map;} \
template<typename T, typename U, typename V>
VARIABLE FADDCLASS(T member, U ptr, V desc)
{
VARIABLE(member, ptr, desc);
}
#define ADDCLASS(member) \
FADDCLASS(#member, pThis->member, #member), \
当它尝试构建以下过程时,它给了我这个错误。
struct test
{
char * name;
BEGIN_INI_MAP(test)
ADDCLASS(name)
END_INI_MAP()
}
错误C2665:&#34; VARIABLE :: VARIABLE&#34; 3个重载中没有一个可以转换所有参数类型。 我该如何解决这个问题? 我好几个小时都在为此感到困惑。
答案 0 :(得分:0)
VARIABLE::VARIABLE(...)
唯一带有3个参数的重载需要LPCTSTR
,泛型U
和另一个LPCTSTR
。那为什么FADDCLASS(...)
需要3个泛型?需要LPCTSTR
代替T
和V
。