我想在类中创建一个静态方法,它基本上只为我创建组件,我想为不同的类重载此方法,但我无法让它工作。这是我到目前为止所提出的最好的方法:
template <typename T, typename... Args>
static T* _Create(Args&&... args)
{
T* component = new T(std::forward<Args>(args)...);
return component;
}
template <typename T, typename... Args, typename std::enable_if<std::is_same<Camera, T>::value>::type* = nullptr>
static T* _Create(Args&&... args)
{
T* component = new T(std::forward<Args>(args)...);
// Do stuff with the component e.g. add it to a list
return component;
}
template <typename T, typename... Args, typename std::enable_if<std::is_base_of<CRenderer, T>::value>::type* = nullptr>
static T* _Create(Args&&... args)
{
T* component = new T(std::forward<Args>(args)...);
// Do stuff with the component e.g. add it to a list
return component;
}
但当然这不起作用,因为_Create与“Camera”确实匹配第一和第二个功能。有人可以请我朝正确的方向努力吗?我怎样才能做到这一点?
答案 0 :(得分:2)
由于您可以访问C ++ 17(并且已经表现出犹豫不决以添加更多enable_if
)...
您可以使用if constexpr
将所有功能合并为一个!
template <typename T, typename... Args>
static T* _Create(Args&&... args)
{
T* component = new T(std::forward<Args>(args)...);
if constexpr( std::is_same<Camera, T>::value )
{
// Do stuff with the component e.g. add it to a list
}
if constexpr( std::is_base_of<CRenderer, T>::value )
{
// Do stuff with the component e.g. add it to a list
}
return component;
}
这将生成与您编写的代码一样高效的代码。