动态模板中是否包含干净的方法?

时间:2017-08-30 10:45:55

标签: c++

我对此表示不满:

假设您有一个要保持动态的模板类。因此,您必须在头文件中实现它。

现在说你在头文件中有几个包含通常属于源文件的包含,例如

#include <algorithm>
#include <cassert>
#include <cmath>
#include <iostream>

这样做的结果是每次包含模板类时,所有这些都将被包含在内。这让我在这里绊了一下 - 这在某种程度上看起来很脏。

所以我的问题是,有没有办法做到这一点更好?不离开动态模板类的概念,即。

在SO上,我找到local #includes,但在那一个中​​,答案是关于将包含在源文件中。

1 个答案:

答案 0 :(得分:2)

不,没有解决方案。

为了便于阅读,我们假设您的模板只有一个模板参数T。现在,如果您的模板使用std::find<std::vector<T>::iterator, T>,则很明显它需要T<algorithm>。在模板编译的第一阶段就已经是这种情况了(记住,模板通常被编译两次 - 第一次遇到它时,以及它被实例化时)

现在查看T==std::string>模板的实例化。因此,这将需要隐式实例化std::find<std::vector<std::string>::iterator, std::string> - 第二次编译模板。你还需要<algorithm>。您还需要std::string,但包含<string>的代码是使用std::string>实例化您的模板的代码的可靠性。