1

(我觉得这一定是重复的,但我找不到它)。

考虑:

飞机.hpp:

template<class T>
void wings();

void tail();

现在......在哪里定义 wings()tail()?我想在同一个地方定义它们;我不想考虑wings()模板化和tail()不是模板化的事实。也许你会明白为什么我有时会写:

飞机.hpp:

template<class T>
void wings();

void tail();

#ifndef airplane_cpp
#define header
#endif
#include "airplane.cpp"

飞机.cpp:

#define airplane_cpp
#include "airplane.hpp"

template<class T>
void wings() { }

#ifndef header
void tail() { }
#endif

但这肯定不是最好的方法。

编辑:似乎有必要添加我正在TI DSP芯片上编程,根据文档inline关键字对生成的代码有定义的后果:

inline 关键字指定函数在其被调用处内联扩展,而不是使用标准调用过程。编译器执行使用 inline 关键字声明的函数的内联扩展。

4

2 回答 2

2

如果您制作它们,您可以在标题中定义所有功能inline

template<class T>
inline void wings() {}
// inline not really needed here, but if you don't want to think about it...

inline void tail() {}
于 2012-07-03T23:38:00.097 回答
1

您可以使用export模板前面的关键字来实现您想要的。不幸的是,这个关键字并没有在编译器中获得相当大的支持。

换句话说,实际上,您应该在头文件中定义模板的主体。

从我的角度来看,编译器供应商应该努力实现用于函数的相同范例,也用于模板。即接口的描述应该留在头文件中,主体的描述在cpp文件中。在链接过程中,所有内容都应该组合在一起。他们没有这样做。正如我们今天所拥有的,函数和模板的范式是不同的。模板是compile time ony实体。

于 2012-07-03T23:44:21.377 回答