c++ - 模板成员函数仅在调用时实例化

标签 c++ templates member-functions

为什么这段代码会出错:

template <typename T>
    class CLs{
        public:
        void print(T* p){ p->print(); }
    };

    void main() {
        CLs<int> c1; // compilation OK
        CLs<double> c2; // compilation OK
        double d=3;
        c2.print(&d);
    }

我的讲师说 c2.print(&d); 行有一个错误:

编译错误:成员函数仅在调用时实例化。

他是什么意思?

最佳答案

类模板的成员函数只有在被使用时才会真正生成。这是模板的重要组成部分,它可以防止不必要的代码膨胀,并允许支持不满足模板的整个隐式契约(Contract)但足以使用的类型。

您对 CLs<T> 的声明变量编译干净,因为 print函数在使用之前不会被编译。 c2.print(&d)编译失败,因为它会导致 CLs<double>::print 的实例化, 这是病式的。

关于c++ - 模板成员函数仅在调用时实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157196/

相关文章:

输入值后 C++ 哈希表程序挂起

c++ - 有任何论文探讨了可用于基于 C++ 的 COM 应用程序的性能问题和优化策略吗?

c++ - 这是虚拟成员函数模板吗?

c++ - 仅在类的第一个实例初始化时调用的成员函数 (C++)

c++ - 应该声明哪些必要的特殊成员函数?

c++ - 在 VS2008 中编译的代码不在 VS2013 中,const 重载

c++ - ISO C++ 禁止在 devc++ 中比较指针和整数 [-fpermissive] 错误

c++模板问题

C++多行输入

c++ - 关于推导转换函数模板参数的几个问题