宏 htonl 将内部逗号解释为参数分隔符

Macro htonl interpretes inner commas as parameter separator

这是一个在编译时返回的异常错误,只有一些编译器参数。

可以 g++ -std=c++11 -m64 -O3 -DNDEBUG

但是使用g++ -std=c++11 -m64 -Wall -g,会出现这个问题:

macro "htonl" passed 7 arguments, but takes just 1

代码:

const unsigned int h = htonl(hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash);

我不确定问题是来自 htonl 的调用还是来自我的模板哈希器。

你知道怎么解决吗?

其他信息:

template<const char C0,         const char C1 =  '[=11=]', const char C2 =  '[=11=]', 
         const char C3  = '[=11=]', const char C4 =  '[=11=]', const char C5 =  '[=11=]', 
         const char C6  = '[=11=]', const char C7 =  '[=11=]', const char C8 =  '[=11=]', 
         const char C9  = '[=11=]', const char C10 = '[=11=]'>
struct CompileTime
{
    //Do you think this code could help?
};

再加一对牙套:

htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash))

一个解决方案是用额外的括号帮助宏:

const unsigned int h = htonl((hash::CompileTime<'A', 'S', 't', 'r', 'i', 'n', 'g'>::hash));

解释为什么...这个 post 会有所帮助 Comma in C/C++ macro

这是宏内部逗号解释的问题。