5

Hazır haberleri için using bildirimine sahip olmak mümkün mü operator ""?`Kullanıcı tanımlı bir hazır işleci için bildirimi kullanma

Ör

#include <chrono> 

namespace MyNamespace 
{ 
    constexpr std::chrono::hours operator "" _hr(unsigned long long n){ 
    return std::chrono::hours{n}; 
    } 

    // ... other stuff in the namespace ... 
} 

using MyNamespace::operator""; // DOES NOT COMPILE! 

int main() 
{ 
    auto foo = 37_hr; 
} 

Benim iş çevresinde using namespace MyNamespace::literals; verir literals denilen kendi iç içe ad, bu operatörlere koymak, ama bu biraz kaba görünüyor ve neden using görmüyorum etti yönerge, operator işlevleri için ad alanı içindeki diğer işlevler veya türler için aynı şekilde kullanılamaz.

+2

';' –

+0

@PiotrSkotnicki Bu, dostum, bir cevaptır. (Doğru bir cevap, hatta!) –

cevap

6
using MyNamespace::operator""_hr; 
//       ^^^ 

DEMO

Dilbilgisi referans:

_ hr "" MyNamespace :: operatörü kullanarak
using-declaration: 
    using typename (opt) nested-name-specifier unqualified-id ; 
    using :: unqualified-id ; 

unqualified-id: 
    identifier 
    operator-function-id 
    conversion-function-id 
    literal-operator-id 
    ~ class-name 
    ~ decltype-specifier 
    template-id 

literal-operator-id: 
    operator string-literal identifier 
    operator user-defined-string-literal 
+0

Yani kullanıcı tanımlı string-literal ',' ''_hr'' a karşılık gelen sözdizimi öğesidir? –

+0

@KyleStrand evet, 'kullanıcı tanımlı-dizgi-literal', sırasıyla "" "ve" _hr "olan" dizgi-literal tanımlayıcı "ile aynıdır. –