【发布时间】:2015-06-22 18:15:48
【问题描述】:
我正在使用 C++ 开发一个项目,但是当我显式实例化模板类时,我无法理解模板类的哪些成员会被显式实例化。我编写了以下文件,然后使用 Visual C++ 2008 Express Edition 的 Release 配置对其进行编译,然后弹出到反汇编程序中。
template<typename T> class test {
public:
template<typename T> test(T param) {
parameter = param;
};
~test() {};
int pop();
int push();
T parameter;
};
template<typename T> int test<T>::push() {return 1;}
template<typename T> int test<T>::pop() {return 2;}
template class test<int>;
int main() {
return 0;
}
暂时忽略这个文件真的不需要模板,这编译得很好。我将 exe 放入反汇编程序,它告诉我 test
template test<int>::test(int);
这会导致 test
【问题讨论】:
-
您的类模板无效,因为构造函数的模板参数隐藏了类的模板参数。但是 VC++ 编译器默默地接受它并不奇怪。
-
如果模板参数未知,如何实例化构造函数?
标签: c++ templates constructor explicit-instantiation