考虑一个包含组件映射的类,其中每个组件都按其类型标识,这意味着每个var1
的类型都是唯一的。
var2
使用模板和Component
,我为这些组件创建了一个getter:
std::map<std::type_index, Component*>
我对此已经非常满意,但有没有办法将此模板类型用作索引器?像这样:
typeof
答案 0 :(得分:1)
这可能是您可以实现而不诉诸宏或创建不必要的实例的最佳选择:
int main()
{
map m;
m[type_w<int>] = /* ... */;
}
实现:
template <typename T>
struct type_wrapper { using type = T; };
template <typename T>
inline constexpr type_wrapper<T> type_w{};
struct map
{
template <typename T>
void operator[](type_wrapper<T>) { }
};
答案 1 :(得分:0)
Physics
是一个类型,所以你不能将它传递给一个函数(运算符只是一个函数的语法糖)。你可以做的是传递一个实例:
Physics *p = object[Physics{}]; // assuming Physics is default-constructible
但是,如果您无法创建Physics
实例,那么该解决方案将无效。另一种解决方案是创建enum
,并将其传递给运营商:
enum class types {
Physics, SomethingElse
};
Physics *p = object[types::Physics];
您必须比较传递给该函数的typeof
的值,而不是使用types
。