不确定如何最好地说出这个问题。我的内存,堆栈空间有限,没有堆,没有std
;这导致需要在堆栈上存在所有内容。
我有一些可能非常大的对象(请从我的小例子中推断出来,请在“初始化期间只做各种类型的静态实例”的回答是错过了我的问题)。
代码示例可能效果最好:
template <typename T1, typenameT2>
class Foo {
public:
void doStuff(int index) {
switch (index) {
case 0: {
T0 t;
t.run();
break;
}
case 1: {
T1 t;
t.run();
break;
}
// etc; there are more than a couple.
}
最终,我更喜欢做的事情是:
void doStuff(int index) {
// sanity check index first;
myTemplates[index] t;
t.run();
}
正如我设置的那样,我显然没有mytemplates
数组;这是我的问题 - 我可以做那样的事情,而不是有这么大的,重复的switch
- 陈述吗?
我意识到我无法创建实例化类型的实际数组,因为类型不同,这就是重点。即使我可以,我也不想要一个 instantiations 数组,我想要一个模板类型的“数组”。
如果相关,我的所有类型T0
,T1
等都来自同一个基础。
答案 0 :(得分:1)
您可以执行以下操作:
template <typename Ts...>
struct doStuffHelper
{
template <typename T>
static void doStuffT()
{
T t;
t.run();
}
void operator () (std::size_t i) const
{
std::array<void(*)(), sizeof...(Ts)> fs {&doStuffT<Ts>...};
fs[i]();
}
};
void doStuff(int index) {
doStuffHelper<T0, T1 /*, ..*/>{}(index);
}