0
請參見下面的代碼:解決靜態索引值
#include <iostream>
#include <string>
using namespace std;
enum dataType {
DATATYPE_BYTE,
DATATYPE_CHAR,
DATATYPE_UCHAR,
DATATYPE_SHORT,
DATATYPE_USHORT,
DATATYPE_INT,
DATATYPE_UINT,
DATATYPE_LONG,
DATATYPE_ULONG,
DATATYPE_FLOAT,
DATATYPE_UFLOAT,
DATATYPE_DOUBLE,
DATATYPE_UDOUBLE,
DATATYPE_BLOB,
DATATYPE_STRING,
DATATYPE_COMPLEX,
DATATYPE_MORE,
DATATYPE_ERROR
};
typedef struct typenamepair_ {
const dataType name;
const char* const nameval ;
} typenamepair;
class types {
private:
typenamepair *typesArr;
static typenamepair TYPES[];
static types* instance_;
public:
static types* getInstance() {
if (!instance_)
instance_ = new types;
return instance_;
}
const char* operator[](dataType typeEnum)
{
for (unsigned int i = 0; i < (sizeof(types::TYPES)/sizeof(typenamepair)); ++i) {
if (i == TYPES[i].name )
return TYPES[i].nameval;
}
// failed to get value. return error
return TYPES[DATATYPE_ERROR].nameval;
}
};
types* types::instance_ = NULL;
typenamepair types::TYPES[] = {
{ DATATYPE_BYTE, "byte" },
{ DATATYPE_CHAR, "char" },
{ DATATYPE_UCHAR, "u_char" },
{ DATATYPE_SHORT, "short" },
{ DATATYPE_USHORT, "u_short" },
{ DATATYPE_INT, "int" },
{ DATATYPE_UINT, "u_int" },
{ DATATYPE_FLOAT, "float"},
{ DATATYPE_UFLOAT, "u_float"},
{ DATATYPE_DOUBLE, "double"},
{ DATATYPE_UDOUBLE, "u_double"},
{ DATATYPE_STRING, "cstring"},
{ DATATYPE_BLOB, "blob"},
{ DATATYPE_COMPLEX, "complex"},
{ DATATYPE_MORE, "more"},
// Unknown type!
{ DATATYPE_ERROR, "ERROR"}
};
main()
{
const char* test = (types::getInstance())[DATATYPE_UINT] ;
cout << test << endl;
}
給了我下面的編譯錯誤:
TEST.CPP:在成員函數'爲const char *類型::經營者: test.cpp:53:錯誤:應用'sizeof'到不完整類型'typenamepair []' test.cpp:在函數'int main()'中: test.cpp:87:error:can not convert'types '初始化爲'const char *'
尺寸大小有什麼問題,我該如何解決? 另外,如何使用返回的instace來使用操作符來獲取類型名?
此外,請讓我知道是否有更好的解決方案。 謝謝
1. singleton與您的問題無關。簡化你的例子將有助於我們幫助你 2.你可以使用`dataType`作爲你的數組的索引,所以你不需要迭代它 – 2011-02-17 16:28:45
不幸的是,不能使用數據類型作爲索引,因爲它需要根據API規格。下次將確保刪除不相關的代碼。謝謝。如果不是單身人士,有什麼選擇? – Kiran 2011-02-17 18:19:42