【发布时间】:2014-06-21 23:22:11
【问题描述】:
经常讨论无法转发声明std::string和std::wstring的问题。据我了解,原因是这些类型是模板类basic_string实例化的类型定义:
namespace std {
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
}
并且该语言不允许前向声明 typedef。
c++ 标准使用继承而不是 typedef 会不会更好:
namespace std {
class string : public basic_string<char> {};
class wstring : public basic_string<wchar_t> {};
}
这样我们就可以转发声明std::string和std::wstring?
【问题讨论】:
-
为什么需要前向声明它们?
#include <string>可以很好地处理任何声明。 -
这是我要避免的 -
#include <string> -
你为什么要避免
#include?还有其他方法可以提高编译速度;看看预编译的头文件。 -
作为经验法则。如果它有模板:很难转发声明。如果您从模板类继承,它不会使前向声明更容易。一般来说,
stl定义过于松散,无法安全地向前声明。 -
您不知道英特尔编译器是否支持预编译头文件...。您查看文档了吗?或者问谷歌?看起来 pch 支持在那里,而不是新的。过去十年的任何版本都会有它。
标签: c++ templates inheritance forward-declaration stdstring