5

Có thể khai báo using cho toán tử literal, operator "" không?Khai báo `sử dụng` cho một toán tử dạng chữ do người dùng định nghĩa

Ví dụ,

#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; 
} 

công việc xung quanh của tôi đã được đặt các nhà khai thác trong namespace lồng nhau của riêng họ gọi literals, cho phép using namespace MyNamespace::literals;, nhưng điều này có vẻ hơi không thanh nha, và tôi không hiểu tại sao các using không thể sử dụng chỉ thị cho các hàm operator giống như cách có thể cho bất kỳ chức năng hoặc loại nào khác trong không gian tên.

+2

'sử dụng MyNameSpace :: operator "" _ hr; ' –

+0

@PiotrSkotnicki đó, bạn của tôi, là một câu trả lời. (Câu trả lời đúng, ngay cả!) –

Trả lời

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

DEMO

Grammar tham khảo:

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

Vì vậy, 'người dùng định nghĩa chuỗi-chữ 'là phần tử cú pháp tương ứng với' "" _hr'? –

+0

@KyleStrand yes, 'user-defined-string-literal' giống như' định danh chuỗi ký tự' tương ứng là '" "' và '_hr' –

Các vấn đề liên quan