可能重复:
这个"数组大小"模板函数如何工作?
NARR在C++(C++ 0x)中没有宏可以实现吗?
const static pair<string,int> data[] = {
{"Montag",1}, {"Dienstag",2}, {"Mittwoch",3}, {"Donnerstag",4},
{"Freitag",5}, {"Samstag",6}, {"Sonntag",7}
};
#define NARR(A) (sizeof(A)/sizeof(*A))
const static map<string,int> german_weekdays(data, data+NARR(data));
Run Code Online (Sandbox Code Playgroud)
一个简单的函数是不可能的,因为那时[]失去了它的大小信息,变成了另一个诗人:
size_t narr(sometype arr[]) { /* won't work */ }
Run Code Online (Sandbox Code Playgroud)
模板?超载?魔法?
在C++中是可能的:
template< typename T, std::size_t Size >
std::size_t size(const T (&)[Size])
{
return Size;
}
Run Code Online (Sandbox Code Playgroud)
这相对于宏解决方案的优势在于,如果您尝试将指针传递给此,编译器将会发出令人讨厌的错误消息.
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |