【发布时间】:2012-09-27 11:48:00
【问题描述】:
我使用 C++ 并计划一个包含大约 100 个模板参数的类的库。当然,我担心有n个模板参数,如果用户需要每个组合,我们有2^n个不同的类,这是一种代码爆炸。但是,用户需要为此进行 2^n 次实例化。
我的问题是:这么多模板参数的主要技术问题是什么?
注意事项:
- 对于技术,我对关于可读性、设计等的主观答案不感兴趣。我的意思是像这样的事实
- 运行时
- 代码大小
- 允许的最大模板数
代码示例:
// here we have 2, but I have 100 template parameters
template<typename T1, typename T2>
class Class
{
T1 x;
T2 y;
int add(T1 _x, T2 _y) { return _x+_y; } // 4 instanciations possible?
Class<T2, T1>* swap() { return new Class<T2, T1>(); } // always 2 instanciations?
};
【问题讨论】:
-
您不能仅仅放弃设计考虑。这是糟糕的设计,部分是因为技术限制。
-
您确实需要澄清“100 个模板参数”的含义。我脑海中的想象是一个有 100 个模板参数的模板。在德克萨斯州,我们有时间进行这种设计:拿一根绳子。
-
我不想维护这段代码......
-
如何计算
2^n的组合数?仅当您的每个n参数只能采用两个不同的值(例如,如果它们是布尔值)时,这才是正确的。潜在实例化的正确数量是k^n,其中n是参数的数量,k是这些参数可以采用的值的数量。由于您声明n~ 100,您的用户将永远无法使用所有组合。你为什么不告诉我们你的库试图用这么多模板参数解决的实际问题?也许我们可以提出更可行的替代方案。