tim*_*tee 5 c++ arrays c-strings
const char* s1 = "teststirg";
const char s2[] = "teststirg";
Run Code Online (Sandbox Code Playgroud)
我想要一个方法告诉我s1是"char*"而s2是"char []",如何编写方法?
使用模板:
template<typename T, unsigned int SIZE>
bool IsArray (T (&a)[SIZE]) { return true; }
template<typename T>
bool IsArray (T *p) { return false; }
Run Code Online (Sandbox Code Playgroud)
这将在运行时进行评估.
用法:
if(IsArray(s1))
...
if(IsArray(s2))
...
Run Code Online (Sandbox Code Playgroud)
如果有兴趣,你可以使用一些先进的技术,这将告诉你这是编译时间.
编辑:
typedef char (&yes)[2];
template<typename T, unsigned int SIZE>
yes IsArray (T (&a)[SIZE]);
template<typename T>
char IsArray (T *p);
Run Code Online (Sandbox Code Playgroud)
用法:
if(sizeof(IsArray(s1)) == sizeof(yes))
...
if(sizeof(IsArray(s2)) == sizeof(yes))
...
Run Code Online (Sandbox Code Playgroud)