我有一个这样的课程:
struct WorkItemResultData;
template <typename ExecutionPolicy>
class Engine
{
public:
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}
typedef
不依赖于任何模板参数。有没有办法在Engine::WorkItemResultData_ptr
类之外使用类型Engine
?
编辑我知道我可以像awoodland一样使用它提出了解决方案,但我的typedef独立于类型参数,并希望能够在不指定特定引擎类型的情况下完成。
答案 0 :(得分:3)
有没有办法在Engine类之外使用类型
Engine::WorkItemResultData_ptr
?
是的,但如果它在模板上下文中,您需要说typename
,例如:
template <typename T>
void foo() {
typename Engine<T>::WorkItemResultData_ptr instance;
}
如果没有类型,您无法访问typedef
。有三种可行的解决方法:
typedef
! - 如果模板不依赖于类型,它可能与模板没什么关系。Engine<void>::WorkItemResultData_ptr
。答案 1 :(得分:3)
由于typedef根本不依赖于Engine
,所以你可以将它从类中拉出来:
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
template <typename ExecutionPolicy>
class Engine {...};
如果要保持封装,只需使用命名空间:
namespace Engine
{
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}