簡體   English   中英

任何類型的C ++用戶定義文字

[英]C++ user-defined literals for any type

現在,用戶定義的文字接受一組有限的類型作為輸入參數(請參見此處 )。 有沒有計划接受任何類型作為輸入參數,如果不是,那是為什么呢?

例如,我可能希望能夠以不同的格式(秒,毫秒等)獲得std :: chrono :: duration,並且會執行類似的操作

constexpr double operator"" _s(std::chrono::nanosecond time)
{
   return std::chrono::duration_cast<std::chrono::duration<double, std::chrono::seconds::period>>(time).count();
}

constexpr long operator"" _us(std::chrono::nanoseconds time)
{
    return std::chrono::duration_cast<std::chrono::microseconds>(time).count();
}

// And so on ...

int main()
{
    auto t0 = std::chrono::high_resolution_clock::now();
    // do some stuff
    auto t1 = std::chrono::high_resolution_clock::now();

    std::cout << "Time in seconds : " << (t1 - t0)_s << "s\n";
    std::cout << "Time in microseconds : " << (t1 - t0)_us << "µs\n";

    return 0;
}

也許您可以改用輔助結構:

#include <chrono>
#include <iostream>

using namespace std::literals::chrono_literals;

template <class Duration>
struct dc {
    using rep = typename Duration::rep;
    const std::chrono::nanoseconds time;
    constexpr dc(std::chrono::nanoseconds time):time(time) { }
    constexpr operator rep() {
       return std::chrono::duration_cast<Duration>(time).count();
    }
};

using s_ = dc<std::chrono::seconds>;
using us_ = dc<std::chrono::microseconds>;

// And so on ...

template <us_::rep N>
struct S {
};

int main()
{
    auto t0 = std::chrono::high_resolution_clock::now();
    // do some stuff
    auto t1 = std::chrono::high_resolution_clock::now();
    std::cout << "Time in seconds : " << s_(t1 - t0) << "s\n";
    std::cout << "Time in microseconds : " << us_(t1 - t0) << "µs\n";
    S<us_(10us)> us;
    (void)us;
    return 0;
}

[現場演示]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM