我对此表示不满:
假设您有一个要保持动态的模板类。因此,您必须在头文件中实现它。
现在说你在头文件中有几个包含通常属于源文件的包含,例如
#include <algorithm>
#include <cassert>
#include <cmath>
#include <iostream>
这样做的结果是每次包含模板类时,所有这些都将被包含在内。这让我在这里绊了一下 - 这在某种程度上看起来很脏。
所以我的问题是,有没有办法做到这一点更好?不离开动态模板类的概念,即。
在SO上,我找到local #includes,但在那一个中,答案是关于将包含在源文件中。
答案 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>
实例化您的模板的代码的可靠性。