निम्नलिखित कोड संकलित करता है (g++ 4.7.2
):std :: chrono: जोड़ने के कस्टम अवधि time_point को
#include <chrono>
typedef std::chrono::duration<double> double_prec_seconds;
typedef std::chrono::time_point<std::chrono::system_clock> timepoint_t;
void do_something(const timepoint_t& tm)
{
// ...
}
int main(int argc, char** argv)
{
timepoint_t t0 = std::chrono::system_clock::now();
timepoint_t t1 = t0 + std::chrono::seconds(3);
// timepoint_t t3 = t0 + double_prec_seconds(3.14);
auto t3 = t0 + double_prec_seconds(3.14);
do_something(t1);
}
मेरे समस्या मैं t3
है कि किस प्रकार पता नहीं है कि है। यह timepoint_t
नहीं है, और स्पष्ट रूप से दिए गए प्रकार के साथ लाइन को अन-टिप्पणी करने से संकलित नहीं होगा। फंक्शन कॉल के साथ ही: मैं के साथ do_something
पर कॉल नहीं कर सकता।
तो मेरी प्रश्न हैं:
- क्यों रूपांतरण असफल रहा है?
- डबल परिशुद्धता सेकंड अवधि होने का सबसे अच्छा तरीका क्या है?
मुझे पता है कि मैं इस
// this works
timepoint_t t3 = t0 + std::chrono::duration_cast<std::chrono::milliseconds>(double_prec_seconds(3.14));
की तरह एक अतिरिक्त डाली उपयोग कर सकते हैं, लेकिन मैं इस से बचना चाहते हैं।
अग्रिम धन्यवाद!
मैंने टाइपिड (टी 3) .name(), C++ filt पर पाइपिंग stdout का उपयोग कर t3 के प्रकार को मुद्रित किया, और यह कहा कि 'std :: chrono :: time_point>> '। सिर्फ आपकी जानकारी के लिए। –
उपकरण के साथ संकेत के लिए धन्यवाद! मैंने मूल रूप से वही किया, बिना 'सी ++ फिल्ट' के और एक गुप्त नाम को छोड़कर कुछ भी "उपयोगी" नहीं मिला। 'C++ filt' मदद करने लगता है, उसे नहीं पता था। –