我在文件 myclass.hpp
中有以下类:
#ifndef MYCLASS_HPP
#define MYCLASS_HPP
#include <cstdlib>
#include <iostream>
template <std::size_t l, typename T>
class MyClass {
public:
MyClass();
MyClass(const MyClass<l,T>& other);
};
#include "myclass.tpp"
#endif
和伪实现文件myclass.tpp
:
template <std::size_t l, typename T>
MyClass<l,T>::MyCLass() {
std::cout << "Ctor" << std::endl;
}
template <std::size_t l, typename T>
MyClass<l,T>::MyCLass(const MyCLass<l,T>& other) {
std::cout << "COPY Ctor" << std::endl;
}
在我的主文件中我有:
#include "myclass.hpp"
int main(int argc, char** argv) {
MyCLass<10,int> m1;
MyClass<10,int> m2;
m1 = m2; // <-- HERE
}
复制构造函数没有被调用。打印输出如下:
Ctor
Ctor
我做错了什么?谢谢
最佳答案
因为您没有调用复制构造函数,所以您调用的是复制赋值运算符。复制构造函数调用将是:
MyClass<10,int> m2(m1);
您调用的函数具有签名:
template <std::size_t l, typename T>
MyClass<l, T>& operator=(const MyClass<l, T>& other);
关于c++ - 未在模板类中调用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18652348/