2013-02-24 11 views
6

निम्नलिखित कोड संकलित करता है (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)); 

की तरह एक अतिरिक्त डाली उपयोग कर सकते हैं, लेकिन मैं इस से बचना चाहते हैं।

अग्रिम धन्यवाद!

+1

मैंने टाइपिड (टी 3) .name(), C++ filt पर पाइपिंग stdout का उपयोग कर t3 के प्रकार को मुद्रित किया, और यह कहा कि 'std :: chrono :: time_point >> '। सिर्फ आपकी जानकारी के लिए। –

+0

उपकरण के साथ संकेत के लिए धन्यवाद! मैंने मूल रूप से वही किया, बिना 'सी ++ फिल्ट' के और एक गुप्त नाम को छोड़कर कुछ भी "उपयोगी" नहीं मिला। 'C++ filt' मदद करने लगता है, उसे नहीं पता था। –

उत्तर

7

रूपांतरण विफल रहता है, क्योंकि

std::chrono::time_point< std::chrono::system_clock, 
         std::chrono::duration<double> > 

को

std::chrono::time_point< std::chrono::system_clock, 
         std::chrono::system_clock::duration > 

से कोई रूपांतरण सबसे आसान तरीका है double_prec_secondstime_point के लिए एक टेम्पलेट पैरामीटर के रूप में देने के लिए हो सकता है, देखते हैं वहाँ std::chrono::time_point

typedef std::chrono::time_point< std::chrono::system_clock, 
           double_prec_seconds > timepoint_t; 

तो आपके पास पहले से ही वें है t3 और do_something के लिए उचित प्रकार।

+0

बिल्कुल सही! धन्यवाद! मैंने एक रूपांतरण प्रदान करने की कोशिश की, लेकिन मेरे 'टाइपपीफ' को बदलने के बारे में नहीं सोचा। मेरा कोड अब दिखता है और इरादे की तरह काम करता है। –

संबंधित मुद्दे