繁体   English   中英

C ++模板的声明和定义分隔

[英]Declaration and Definition Separation for C++ Templates

因此,最近我在使用模板元编程(使用《 现代C ++设计 》一书作为当前参考)建立个人库方面一直取得进展。

我一直在考虑布局模板代码的最佳方法。 显然,编译器希望模板的定义在声明的同一文件中可见。 但是,我想将声明与定义分开,所以当我只想查看方法原型或其他内容时,我的工作量就更少了。

因此,要解决此问题,可以通过以下示例说明我开始要做的事情:

SomeClass.hpp

#ifndef _someclass_hpp
#define _someclass_hpp

template<typename T>
class SomeClass {
public:
...
private:
...
};

#include "SomeClass_Implementation.hpp"

#endif

SomeClass_Implementation.hpp

#ifndef _someclass_impl_hpp
#define _someclass_impl_hpp

#include "SomeClass.hpp"

/* SomeClass Implementation... */

#endif

我个人比较喜欢这样,而不是将所有内容都保存在一个文件中,但是我很好奇是否有人在处理此问题时有任何技巧,或者有任何可能使我考虑将其全部转储到一个文件中的推理。

我喜欢的一种方法是这样做:

Header.hpp:

#ifndef FileGuard_whatever // technically reserved by STL because
#define FileGuard_whatever // it starts with a capital letter

template <typename T>
class A
{
    void go ( T const& value ) ;
} ;

#include "Header.hxx" // implementation details

#endif // FileGuard

Header.hxx:

template <typename T>
void A<T>::go ( T const& value ) { }

这几乎就是您要做的。 我在另一个文件中省略了附加的File Guard,并给出了一个名称,让人们知道不要导入它。

我很幸运。 人们花了.hxx秒钟的时间才能解决它,但是.hxx至少可以帮助解决这一问题(“这是不同的;好吧, 有什么不同?”)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM