<>我使用 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?
};
最佳答案
实际上,模板化的类类型是在编译时确定的。这并不意味着你有 2^n 个不同的类,而是你只有 n 个类。在编译时,适当的类型被替换,类成员/函数只是您使用它们的类型。
例如
template <class Type1, class Type2>
class A
{
private:
Type1 member_x;
public:
Type2 GetTypeValue(Type1, Type2);
};
像这样实例化时:
A<int, string> *x = new A<int, string>();
仅作为具有整数类型成员和字符串类型成员的类进行编译。 Same 代表函数等。
更新:
对于下面更新的示例,您仍然只有一个函数实例,它将是一个 string
返回函数,该函数采用参数 int
和 string
。
关于c++ - C++ 中的模板参数太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620674/