C++ 在类中声明类型别名的替代方法

C++ 在类中声明类型别名的替代方法,c++,c++11,templates,c++17,C++,C++11,Templates,C++17,我正在使用另一个库中的类(sf::Texture)。 我想获得在该类中声明类型别名的功能,如: class Texture { public: using ResourceId = TextureId; //... } 因此,我可以在我的代码中执行此操作: enum class TextureId { texture1, texture2 //..etc } template<class ResourceType> class ResourceCo

我正在使用另一个库中的类(
sf::Texture
)。 我想获得在该类中声明类型别名的功能,如:

class Texture
{
public:
    using ResourceId = TextureId;
    //...
}
因此,我可以在我的代码中执行此操作:

enum class TextureId
{
    texture1,
    texture2 //..etc
}

template<class ResourceType>
class ResourceContainer
{
public:
    ResourceContainer();
private:
    ResourceType* resource_;
    typename ResourceType::ResourceId id; // <--- this will have TextureId type
                                          // when we create this object 
                                          // with <sf::Texture>
}
enum类
{
结构1,
纹理2/…等
}
模板
类资源容器
{
公众:
ResourceContainer();
私人:
资源类型*资源类型;

typename ResourceType::ResourceId id;//您可以使用trait类派生
ResourceId
并将其专门用于
纹理。例如:

template < typename T >
struct ResourceTypeTrait
{
  using ResourceId = typename T::ResourceId;
};

template <>
struct ResourceTypeTrait< Texture >
{
  using ResourceId = TextureId;
};
模板
结构资源类型特征
{
使用ResourceId=typename T::ResourceId;
};
模板
结构ResourceTypeTracit
{
使用ResourceId=TextureId;
};
然后你可以做:

template<class ResourceType>
class ResourceContainer
{
public:
    ResourceContainer();
private:
    ResourceType* resource_;
    typename ResourceTypeTrait< ResourceType >::ResourceId id;
};
模板
类资源容器
{
公众:
ResourceContainer();
私人:
资源类型*资源类型;
typename ResourceTypeTracit::ResourceId;
};