模板类类型定义 - 在类外使用
Template class typedef - use outside of class
我有这样的类:
struct WorkItemResultData;
template <typename ExecutionPolicy>
class Engine
{
public:
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}
typedef
不依赖于任何模板参数。有没有办法在类之外使用类型 Engine::WorkItemResultData_ptr
Engine
?
编辑我知道我可以像 awoodland 提出解决方案一样使用它,但我的 typedef 独立于类型参数,并希望能够在不指定特定引擎类型的情况下做到这一点。
由于 typedef 根本不依赖于Engine
,因此您可以将其从类中拉出:
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
template <typename ExecutionPolicy>
class Engine {...};
如果要将其封装,只需使用命名空间:
namespace Engine
{
typedef std::shared_ptr<WorkItemResultData> WorkItemResultData_ptr;
}
有没有办法在引擎类之外使用类型
Engine::WorkItemResultData_ptr
?
是的,但您需要说typename
是否在模板上下文中,例如:
template <typename T>
void foo() {
typename Engine<T>::WorkItemResultData_ptr instance;
}
如果没有类型,则无法访问该typedef
。但是,有三种可能的解决方法:
-
typedef
模板之外! - 如果它不依赖于类型,则可能与模板没有太大关系。 - 使用荬荚并参考
Engine<void>::WorkItemResultData_ptr
. - 有一个包含 typedef 的非模板基类并从中继承。然后,您可以很好地访问非模板基类。
相关文章:
- 使用QJsEngine在Qt中注册自定义类型
- 在UE4中使用未定义类型'UTextBlock'
- 修改"std::set"中用户定义类型的值
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 如何使自定义类型在unordered_map中用作键
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 为什么转换函数声明不需要至少一个定义类型说明符
- 标准::原子中的自定义类型
- 如何使用自定义类型声明Arduino数组?
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 使用自定义访问者时具有自定义类型的提升变体失败(源自 boost::static_visitor)
- 您可以将binary_search应用于具有自定义类型的矢量吗?
- 在自定义类型图中重用 SWIG 映射
- 扩展自定义类型的spdlog
- vim使用户定义类型的COLOR与C++中的基本类型相同
- 重载自定义类型的 std::to_string 和 std::to_chars?
- 具有未声明/未定义类型的 typedef 结构
- 函数重载:内置类型与用户定义类型