假设我有一个整型数组,如
问题是如何实现一个函数:
也许更好的选择是:
int arr[N]
,并且假设arr[i]
的取值范围很小(例如1-10)。此外,我还有一个具有通用接口(抽象类)的可变参数模板类。template <int... A>
class FooImpl : public Foo
{
}
问题是如何实现一个函数:
Foo* getFoo(int arr[N]);
也许更好的选择是:
Foo* getFoo(int* pint, int size);
如何返回模板参数与我的数组相对应的FooImpl
?例如,对于arr = {4,2,6,1}
,我将得到FooImpl<4,2,6,1>
FooImpl
,那么是不可能的。你可以使用类似的初始化器,但是运行时数据评估无法产生编译时的实现。 - WhozCraigint ar[3]; ar[0] = 1; ar[1] = 2; ar[2] = 3;
然后以某种方式将ar
发送到一个工厂,这将导致一个FooImpl<1,2,3>,我唯一看到的方法是一个静态表格有1000个条目,每个插槽都静态定义为返回特定的FooImpl<a,b,c>
但在那一点上它并不是真正的运行时。而且你肯定不会从中继承。 - WhozCraigm4
,您可以避免编写 1110 行代码。使用预处理器,您可以将代码量减少到大约 40 行;使用m4
,您可以在不到 20 行的代码中完成,并通过两个预处理时间变量控制实例化的数量。无论哪种方式都很丑陋,但如果您准备实际编写 1110 个模板实例化,那么应该使用所有可用的工具来减少代码。 - cmaster - reinstate monica