是否可以在C ++类中进行#include?

时间:2017-03-01 19:42:41

标签: c++ class include

我有这个C ++的头文件,它应该使文件输入更容易编码,但我是内存效率。
我的头文件中有一个类,如下所示:

class FileInputOutput {
    #include <fstream>

但我不确定它是否会包含顶部的#include语句,或者它是否会在调用类时包含它。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

  

是否可以在C ++类中进行#include?

至于你的问题标题:有可能,是的。

您应该注意,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只会导致编译期间预处理器复制/粘贴包含的文件内容。 所以,是的,当然,你可以做到这一点,但它并没有给你带来任何效率明智的东西。就像你在包含文件中直接内联编写包含文件的内容一样。