我对模板元编程相当陌生,并且一直在研究一些概念 - 但是,我遇到了这个特定片段,我一直被困住了。std :: enable_if作为构造函数的单个参数
template<class TAG, typename... DATATYPES>
struct Message {
Message (typename std::enable_if<sizeof...(DATATYPES) >= 1>) {
}
... (various other constructor declarations here)
std::tuple<DATATYPES...> m_data;
};
读它时,它被启用默认的构造函数,如果有一个或更多类型的参数,但已经测试过所有我得到的是一个编译错误我承担了。
我希望在帮助我理解这段代码时提供任何帮助,因为我明白enable_if应该做什么,但在这种情况下,我似乎无法将我的头围绕在实际发生的事情上。
编辑:我想这不是一个'我如何达到这个特殊效果?'的问题。并且更多地沿着'这段代码实际产生了什么,这与我所理解的原始作者的意图相匹配吗?'。
我没有时间发布完整的解决方案,但看看http://stackoverflow.com/questions/21901637/class-template-why-cant-i-specializea-a-单一方法为void类型/ 21904225#21904225,相同的技术可以应用于您的问题,除了使用'IsVoid',而不是使用'IsVoid',您将基于arg类型的数量来定义。 –
作为一个经验法则,如果你在一个不是模板的函数中看到'enable_if'(即类模板的成员不计数),那就错了。 –