我有这个C ++的头文件,它应该使文件输入更容易编码,但我是内存效率。
我的头文件中有一个类,如下所示:
class FileInputOutput {
#include <fstream>
但我不确定它是否会包含顶部的#include
语句,或者它是否会在调用类时包含它。
任何人都可以帮助我吗?
答案 0 :(得分:5)
是否可以在C ++类中进行#include? p>
至于你的问题标题:有可能,是的。
您应该注意,c(++)预处理器只是扩展了#include
&#d;文件中的文本,并且在另一个编译阶段检查了c ++验证。
代码
class FileInputOutput {
#include <fstream>
};
将从您的班级fstream
中注入所有文字。
这很可能不是你想要的。
只需使用fstream
做的
#include <fstream>
class FileInputOutput {
std::fstream fs;
};
答案 1 :(得分:2)
C ++(以及C语言)中的预处理程序通过有效地将引用文件的文本复制到使用#include
语句的文件中来表现。
所以当你编写这样的代码时:
Something.h
int my_rand() {
return 4; //chosen by dice roll, guaranteed to be fair
}
Main.cpp的
#include "Something.h"
int main() {
return my_rand();
}
正确编译开始之前的最终文件如下所示。
int my_rand() {
return 4; //chosen by dice roll, guaranteed to be fair
}
int main() {
return my_rand();
}
在你的情况下,写一些像
的东西class my_class {
#include<fstream>
/*...*/
};
会导致一些非常奇怪的行为,并且几乎肯定不会编译,因为<fstream>
的全部内容将被复制到您的课程中间,并且您不太可能&#39 ;已经以适合的方式写了你的课程,或写<fstream>
来处理被注入另一个班级。
但是在某些情况下,您可以在程序中间#include
进行此类操作。观察:
我的资源.txt
R"D(
Blah Blah Blah Blah Blah
)D"
Main.cpp的
int main() {
std::string blah_string = "" //The "" is unnecessary, but I use it to make Intellisense shut up
#include "My Resource.txt"
;
std::cout << blah_string << std::endl;
return 0;
}
哪个会正确打印出来
Blah Blah Blah Blah Blah
到控制台,因为它与编写
相同int main() {
std::string blah_string =
R"D(
Blah Blah Blah Blah Blah
)D"
;
std::cout << blah_string << std::endl;
return 0;
}
答案 2 :(得分:1)
#include
只会导致编译期间预处理器复制/粘贴包含的文件内容。
所以,是的,当然,你可以做到这一点,但它并没有给你带来任何效率明智的东西。就像你在包含文件中直接内联编写包含文件的内容一样。