替代班级内声明类型的别名
Alternative to declaring a type alias inside a class
我正在使用另一个库中的类(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>
}
但是,正如我提到的,Texture
类来自另一个库,因此我无法编辑其声明。
我试图将其在我的代码中声明为using sf::Texture::ResourceId = TextureId;
,但它不起作用(无法解析符号 ResourceId (。
那么,是否有替代方法可以在不添加ResourceId
作为第二个模板参数的情况下获得相同的功能?
(使用C 17(
您可以使用特质类来得出ResourceId
并将其专门用于Texture
。例如:
template < typename T >
struct ResourceTypeTrait
{
using ResourceId = typename T::ResourceId;
};
template <>
struct ResourceTypeTrait< Texture >
{
using ResourceId = TextureId;
};
然后您可以做:
template<class ResourceType>
class ResourceContainer
{
public:
ResourceContainer();
private:
ResourceType* resource_;
typename ResourceTypeTrait< ResourceType >::ResourceId id;
};
相关文章:
- 继承模板类中的类型别名
- 为什么 GCC 在使用类型别名时处理 const reinterpret_cast不同?
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 如何使用类型别名从模板化类中隐藏模板列表
- 如何检测类型类型别名?
- C++类型别名,其中值被替换
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 通过类型别名从构造函数转发模板推导
- C++中的严格别名规则和类型别名
- 使用其他模板类型参数作为要在函数签名中使用的类型别名声明
- 什么是C++中的类型别名?
- 如何在不违反类型别名规则的情况下解释消息负载?
- 在模板派生类中继承具有类型别名的构造函数
- 类型别名允许分配任意指针,尽管 int* 是必需的
- 使用类型别名,例如使用 A = int(int)
- 模板类函数指针类型别名
- 类型别名和类似类型
- 泛型类型别名,它们彼此不兼容
- 具有类型别名的循环依赖项
- 为什么模板引用类型不能用作模板类型别名参数?