我正在尝试使用别名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
是命名空间。您不能在类范围内创建命名空间别名。此外,命名空间别名(在全局范围内)的正确语法是:using coDurationCast = std::chrono::duration_cast<std::chrono::seconds>;
: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>
因此是具体类型。为类型创建别名是有效的,因此此行是有效的。