c++ 具有依賴型別的字串字面量 – 不可能?
可以定義一個使用者定義的字串文字轉換運算子,使其結果的型別取決於其字串輸入的值嗎?
使用者定義的整數和浮點數字很容易,因為它們允許文字操作符模板,並且文字的實際字元作為模板引數傳遞給它.例:
template <char... s> struct silly { using type = int; }; template <char... s> struct silly<'1', s...> { using type = double; }; template <char... s> typename silly<s...>::type operator"" _silly() { return 0; } static_assert(std::is_same<int, decltype(4321_silly)>::value, "no luck"); static_assert(std::is_same<double, decltype(1234_silly)>::value, "no luck");
使用者定義的字串文字似乎不存在這樣的東西.
還有另外一種方法可以在當前的標準中進行,也可以在未來的修訂中進行規劃/討論?
不,不可能,在嚴重的巨集觀黑客之外.字串字面值通過constexpr訪問,並且constexpr的返回型別不能取決於引數的值.
建議的<char ...>字串文字的運算子“”遇到“原始或已處理”問題以及如何指定的問題,以及在下一個標準中及時排除這些問題的地方會很困難,和/或投資回報率很低. (至少從我偶然的閱讀發生了什麼事).
我不知道它是否在葡萄樹上死亡,還是在繼續工作.
黑客將通過<arr [0],arr [1],arr [2]>到模板pseduo手動,並且不會(直接)涉及使用者定義的文字語法.它有很多問題.
http://stackoverflow.com/questions/24884085/string-literal-with-dependent-type-impossible