我正在尝试使用
std::chrono
和 std::chrono::duration_cast<std::chrono::seconds>
的别名,这会引发编译错误。我包含了 <chrono>
头文件。下面是代码:
#include <chrono>
class abc {
public:
using co = std::chrono; // Throwing compilation error
using coDurationCast = std::chrono::duration_cast<std::chrono::seconds>; // Throwing compilation error
using timeType = std::chrono::time_point<std::chrono::system_clock>; // Surprisingly this is working fine
};
错误:
error: ‘chrono’ in namespace ‘std’ does not name a type
error: ‘std::chrono::duration_cast’ in namespace ‘std::chrono’ does not name a template type
我无法理解为什么它会抛出这个错误。令人惊讶的是,该别名适用于
std::chrono::time_point<<std::chrono::system_clock>>
。
任何人都可以帮我理解为什么会抛出此错误吗?
这里有3种不同的情况(来自评论的信息摘要):
using co = std::chrono;
:std::chrono
是一个 命名空间。您无法在类范围内创建名称空间别名。此外,命名空间别名(在全局范围内)的正确语法是:
namespace co = std::chrono;
using coDurationCast = std::chrono::duration_cast<std::chrono::seconds>;
:
std::chrono::duration_cast
是一个函数模板。您无法为函数或函数模板创建别名。using std::chrono::duration_cast;
using timeType = std::chrono::time_point<std::chrono::system_clock>;
:std::chrono::time_point
是一个模板类,因此 std::chrono::time_point<std::chrono::system_clock>
是一个 具体类型。