这个问题在这里已经有了答案:




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/

10-11 18:21