我的头文件如下所示:
// A.hpp --- A's interface
#ifndef MY_H
#define MY_H
#include<string>
#include<vector>
class A {
public:
A(const std::string& name);
std::vector<double> foo() const;
private:
std::string m_name;
};
#endif
我的实现文件如下所示:
// A.cpp --- A's interface implementation
#include<A.hpp>
#include<implementation_detail.hpp>
A::A(const std::string& name)
: m_name(name) { }
std::vector<double> A::foo() const {
std::vector<double> r;
r.push_back(1);
return r;
}
我的立场是我没有#include
string
或vector
在实现文件中没有,因为它们已经在接口中声明,并且#include
在实现文件中添加它们充其量是多余的,更糟的是有害**。
当然,A
的实现将在界面中不可见的#include
所有实现细节。
我的问题:我是对的吗?这种做法会对我的代码产生负面影响吗?
** 这有点牵强,但是包含的数量(以及使用的包含保护)会影响非常大的项目的编译速度;这篇文章很有趣。