我总是被告知typedef
用于简化或缩短名称。我的意思是,没有它我们可以做的事情。但今天我尝试使用<ratio>
库,而且我不知道如何在不使用typedef
的情况下做事。
这是一个简单的例子:
#include <iostream>
#include <ratio> // C++11
int main()
{
const int a = 1, b = 17;
typedef std::ratio<a,b> p;
std::cout << "Number p = " << p::num << "/" << p::den << std::endl;
return 0;
}
如何在不使用typedef
的情况下执行相同的操作?
答案 0 :(得分:1)
你可以做到
std::ratio<a,b>::num
如果您不想使用typedef
答案 1 :(得分:1)
我不明白为什么你需要一个typedef:
int main() {
const int a = 1, b = 17;
std::ratio<a,b> p;
std::cout << "Number p = " << p.num << "/" << p.den << std::endl;
return 0;
}
或者,如果您不想创建变量,请按照其他人提到的那样进行:
std::cout << "Number p = " << std::ratio<a,b>::num << "/" << std::ratio<a,b>::den << std::endl;
答案 2 :(得分:1)
在std::ratio
, num
和den
中,成员对象不是类型。因此,您不能typedef
他们。 † 由于这些成员是constexpr
,您可以使用它们而不使用ratio<a,b>::num
之类的任何对象。
† num
和den
的类型为std::intmax_t
。要使您的合法类型,您可以使用typedef decltype(ratio<a,b>::num) t;
,这远远不是您想要和无用的。