【发布时间】:2016-11-08 20:13:25
【问题描述】:
假设我有一个这样的模板类:
template <typename T>
struct TypeInformation {
static int s_someArbitraryData;
}
template <typename T> TypeInformation<T>::s_someArbitraryData = 0;
然后,稍后我可以做这样的事情:
SomeFunction() {
SetUpData<int>(); // Populates s_someArbitraryData for int.
}
仅通过调用 SetUpData,我就为给定类型设置了一份 s_someArbitraryData 副本。如果可能的话,我想做的是做类似的事情,但设置一种映射类型的方法。像这样的东西,目前不起作用:
template <typename T>
struct MyTypeMap {}
// ...
SomeFunction() {
SetUpTypemap<int, float>(); // Creates a typedef on MyTypeMap<int>
MyTypeMap<int>::type myFloatValue = 1.0f; // A float value
}
我可以通过这样的方式完成right now:
template <>
struct MyTypeMap<int> {
typedef float type;
}
但这对我的情况有一些烦人的缺点。我怀疑我想要的东西是不可能的,但如果有一些我不知道的深层模板魔法可以解决这个问题,我也不会感到惊讶。
【问题讨论】:
-
您可以使用 C++11 或更高版本吗?
using语句可以给你一个模板化的 typedef。 -
我不认为你能做到这一点(除了可修改的 constexpr 事情)
-
你的第一个sn-p是不是错了?
NameOfType是什么?你的意思是TypeInformation? -
@AndyG:C++11 很好。我得调查一下。如果您可以比我自己弄清楚如何发布示例更快地发布示例,那么您可以获得声誉:)
-
@skypjack:是的,我的错。我在编写示例时更改了示例并且没有更新它。很好的收获。