我已经尝试了几种不同的变化而没有快乐......
auto& hrctp = std::chrono::high_resolution_clock::time_point;
auto& hrcn = std::chrono::high_resolution_clock::now;
我知道我可以使用......
use namespace std::chrono::high_resolution_clock;
我理解一个人不应该过于努力地在另一种语言中复制一种语言的范式,但我只是好奇。有没有等价的?
答案 0 :(得分:2)
如果要定义别名,请使用using
指令。这意味着这可行:
using hrctp = std::chrono::high_resolution_clock::time_point;
对于该功能,您可以使用以下内容:
const auto hrcn = std::chrono::high_resolution_clock::now;
这将创建一个指向静态函数的函数指针。
答案 1 :(得分:2)
这很简单。简短回答......类型和功能不同。
// Alias the type...
using hr_time_point = std::chrono::high_resolution_clock::time_point;
// Create reference (like an alias) for the function
auto &hr_now = std::chrono::high_resolution_clock::now;
编译器无疑会优化掉引用,并直接调用引用。
这同样有效:
inline auto hr_now() { return std::chrono::high_resolution_clock::now(); }
同样,优化器将优化间接。
答案 2 :(得分:1)
这比它看起来更复杂。正如Cheers and hth所说,别名对于类型,函数和名称空间是不同的。
对于像std::chrono::high_resolution_clock::time_point
这样的简单类型,您可以使用typedef
或using
:
using hrctp = std::chrono::high_resolution_clock::time_point;
或
typedef std::chrono::high_resolution_clock::time_point hrctp;
using
的优点是你也可以将它用于模板类。
对于静态成员函数或嵌入在命名空间中的独立函数,您只需使用指向函数的指针:
const auto hrcn = std::chrono::high_resolution_clock::now;
你不能为非静态成员函数执行此操作(指向成员函数的指针是一个完全不同的野兽),但幸运的是你不需要(因为你在一个非静态成员函数上调用非静态成员函数)适当类型的对象)。
time_point
的选项纯粹是在编译时完成的。但是,函数别名可能会产生运行时惩罚(因为您通过指针调用函数,而不是直接跳转到该函数)。但是,首先要编写代码,然后再加快速度。 (OTOH,C ++方式可能是:
using hrc =std::chrono::high_resolution_clock;
然后使用hrc::time_point
和hrc::now
。