【发布时间】:2014-12-29 09:21:27
【问题描述】:
template<typename FilterComponent, typename ...FilterComponents>
std::bitset<components_count> component_impl(std::bitset<components_count> &b){
b.set(FilterComponent::get_id());
return component_impl<FilterComponents...>(b); //ambiguous
}
template<typename FilterComponent>
std::bitset<components_count> component_impl(std::bitset<components_count> &b){
b.set(FilterComponent::get_id());
return b;
}
template<typename ...FilterComponents>
std::bitset<components_count> component_mask(){
std::bitset<components_count> b;
component_impl<FilterComponents...>(b);
return b;
}
为什么这个函数调用不明确?我想这样称呼它component_mask<Foo,Bar,Baz>();
error: call to member function 'component_impl' is ambiguous
return component_impl<FilterComponents...>(b);
【问题讨论】:
-
请测试用例...... 为什么我必须在每个问题上都要求测试用例?为什么很难理解它的重要性?为什么没有人在之前在互联网上发布它们?!啊!!!
-
@LightnessRacesinOrbit 好的,给我一点时间。
-
当
FilterComponents只有一个元素时,两个函数模板都可以用完全相同的模板参数实例化。 -
@0x499602D2 谢谢,有道理。
-
@LightnessRacesinOrbit:这就是问题应该包含 complete 错误消息的原因。当然,查看完整的消息,可能不需要这个问题。 IDE 通过提供一个“错误列表”窗口来截断第一个换行符处的错误信息,从而造成巨大的伤害。