使用<ratio>而不使用typedef </ratio>

时间:2014-05-22 13:04:18

标签: c++ c++11 typedef

我总是被告知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的情况下执行相同的操作?

3 个答案:

答案 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, numden中,成员对象不是类型。因此,您不能typedef他们。 由于这些成员是constexpr,您可以使用它们而不使用ratio<a,b>::num之类的任何对象。

numden的类型为std::intmax_t。要使您的合法类型,您可以使用typedef decltype(ratio<a,b>::num) t;,这远远不是您想要和无用的。