我可以阻止非模板类被实例化吗
Can I prevent a non-template class from being instantiated?
C++11提供了外部模板声明,以防止在当前编译单元中实例化模板类的实例。有没有任何方法可以对头文件中声明的非模板化类执行同样的操作,而不修改声明它的头文件?
其动机是减少boost导致的对象文件膨胀,boost只在头中定义了大量的非模板化类,即使在不能应用内联的地方也是如此。
对于大多数意图和目的,实际上没有任何技巧。除非预编译头是一个技巧?我建议您做一些将依赖项从标头中移出的辅助工作。
我尝试修复这类问题的经验是,这通常是您的项目中的库依赖性失控的症状。一切都取决于其他一切,所以很难不把它们都包括在内。因此,当您包含错误的标头时,它会影响所有内容。
可视化您的依赖关系,如果它不是DAG,那么这就是您首先关心的问题。
之后,应该更容易识别导致问题的特定标头。皮条成语和预先声明是纠正细节的好工具。
我在boost方面并没有遇到过持续的问题,尽管他们的一些图书馆可能会制造麻烦。boost::multi_index
是我唯一能想到的。
相关文章:
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 我可以从实例列表中初始化 std::vector<T*> 吗?
- 我可以从initializer_list实例化数组吗?
- C++:我可以在 void 函数中实例化对象吗?
- 如何使用 C++11 unique_ptr实例化我的代码
- 无法将指针定义为用户定义的类,但我可以直接实例化
- C++类实例化是否可以在运行时更改其大小
- 为什么我可以在尚未实例化的类上调用函数
- 我可以使用decltype()来避免显式模板实例化中的代码重复吗
- 我可以实例化一个模板而不重复其签名吗
- 我可以有模板实例化的副作用吗?
- 可视化 我可以在哪里为多个操作系统中的应用程序启动 c++
- 我可以在不实例化模板类的情况下显式实例化模板类的模板成员吗?
- 我可以有一个要实例化的模板列表,而无需事先实例化
- 在运行时检查我是否可以实例化(抽象)类
- 我可以阻止非模板类被实例化吗
- 类模板的所有实例化是否可以共享相同的模板独立成员函数
- 我可以实例化 std::reference_wrapper<T> 其中 T 是不完整的类型吗?
- 我可以在不实例化的情况下使用函数对象吗
- C++:无法用new实例化我的类