2 c++ templates reference vector
我写了一File
堂课File.h
.我编写了Directory类,Directory.h
其中包含File&
vector.两个头具有相同的命名空间
这是代码:
#include "File.h"
#include <vector>
class Directory : public File
{
public:
...
private:
std::vector<(File&)> files;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,它说:
In file included from Directory.cpp:1:0:
Directory.h:29:30: error: template argument 1 is invalid
std::vector<(File&)> files;
^
Directory.h:29:30: error: template argument 2 is invalid
Run Code Online (Sandbox Code Playgroud)
为了清理你的东西,std::vector
要求它的元素是CopyAssignable,而不是哪些引用.
std::vector<File&>
是一个引用的向量File
,请注意这std::vector<(File&)>
是一个语法错误.
你认为std::vector<File> &
会工作,但没有.它是对什么载体的引用?对象.多态性在那里不起作用.而且你需要一个实际的std::vector<File>
实例来引用.
您需要一个指针向量,可以进行复制分配.
如果你使用原始指针,delete
在删除任何元素之前你不必忘记,否则你将泄漏内存(当然,如果在堆上分配了一个对象).智能指针将为您做到这一点:
std::vector<std::shared_ptr<File>> files;
// or
std::vector<std::unique_ptr<File>> files;
Run Code Online (Sandbox Code Playgroud)
参考:std::shared_ptr
,std::unique_ptr
.