这个问题在这里已经有了答案:
10年前关闭。
是否有可能在 C++ (C++0x) 中实现没有宏的 NARR
?
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));
一个简单的函数是不可能的,因为这样
[]
就会丢失它的大小信息并变成另一个指针:size_t narr(sometype arr[]) { /* won't work */ }
模板?重载?魔法?
最佳答案
在 C++ 中是可能的:
template< typename T, std::size_t Size >
std::size_t size(const T (&)[Size])
{
return Size;
}
与宏解决方案相比,此方法的优势在于,如果您尝试将指针传递给它,编译器将发出令人讨厌的错误消息。
关于c++ - Size-Of C-Array 作为函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5548763/