c++ - C++ 中的模板参数太多?

标签 c++ templates

<>我使用 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 返回函数,该函数采用参数 intstring

关于c++ - C++ 中的模板参数太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620674/

相关文章:

c++ - 从 Swift 中的泛型参数继承的替代方法

c++ - 找出是否在 C++ 项目中调用了函数?

c++ - 未调用 operator delete() 的类实现

c++ - 字符串函数的奇怪问题

c++ - 如何使用模板模板参数来专门化类模板?

c++ - 为模板类专门化模板函数

c++ - 寻找一个智能指针,它会在复制智能指针本身时复制底层资源

c++ - 演绎指南、模板和子对象 : which compiler is right?

python - (如何)我可以使用字符串替换来处理/Django i18n {% trans %} 标签吗?

python - 获取 HiddenField 的值并从模板插入它 - Flask