gpt4 book ai didi

c++ - 非模板类中的模板化 friend 类,其中 friend 也使用该类

转载 作者:太空狗 更新时间:2023-10-29 20:22:23 24 4
gpt4 key购买 nike

背景

我有一个非模板类,称为 library 和一个模板类 library_file,它有一个模板参数 F 用于不同的文件类型(如 std::fstreamQFile 等)以保存/加载 library

假设

所以我在定义library 之前放了一个library_file 的前向声明,在最后一个声明了友元声明。因为,由于 library_file 包含 library,否则我将处于依赖关系中。

问题

好友声明失败

In file included from /Users/markus/Entwicklung/cmake_Spielwiese/library.cpp:4:/Users/markus/Entwicklung/cmake_Spielwiese/library.h:12:12: error: C++ requires a type specifier for all declarations    friend library_file;    ~~~~~~ ^/Users/markus/Entwicklung/cmake_Spielwiese/library.h:12:12: error: friends can only be classes or functions2 errors generated.

Code

/*! @file library.h
* */

#ifndef CMAKE_CPP_SPIELWIESE_LIBRARY_H
#define CMAKE_CPP_SPIELWIESE_LIBRARY_H

template <typename F>
class library_file;

class library {
template <typename F>
friend library_file;

};


#endif //CMAKE_CPP_SPIELWIESE_LIBRARY_H

/*! @file library_file.h
* */

#ifndef CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H
#define CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H

#include "library.h"

template <typename F>
class library_file {
F file;
library l;
};


#endif //CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H

/*! @file main.cpp
* */
#include <fstream>
#include "library.h"
#include "library_file.h"

int main() {
library_file<std::fstream> f;
return 0;
}
/*! @file library.cpp
* */

#include "library.h"

最佳答案

模板友元类的正确声明是:

template<class F> friend class library_file;

参见 Class template with template class friend, what's really going on here?

关于c++ - 非模板类中的模板化 friend 类,其中 friend 也使用该类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38051133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com