我有一张组件图。组件是具有一些数据的 POD 类型。每个组件都有一个唯一的标识符。地图在任何时候只能拥有给定类型的一个组件。因此,我希望能够查询地图拥有的组件。这是我用来完成此操作的代码:
template <typename T>
bool has()
{
auto found = map.find(T::tag);
if (found != map.end()) return true;
else return false;
}
这将导致笨拙的代码,例如:something.has<Component<int>>() && something.has<Component<float>>() ... etc;
为了使代码不那么混乱,我想使用可变参数模板。
template <typename T, typename... Args>
bool hasz()
{
has<T>();
has<Args>()...; /* expected ‘;’ before ‘...’ token */
}
不应该has<Args>()...
扩展到(伪)has<Args[0]>(), has<Args[1]>(), etc...
(这将是合法的语法)?有可能做到这一点吗?