using
次のような状況では、(または他の方法で)型エイリアスを使用する必要があります。
template <class T>
typename std::enable_if< /*HERE*/>::value
f (...) {};
私が書いたところにはHERE
、構造内で定義された長い型と複数の型があり、書く代わりにtypename <very long templated struct dependent on T>::type
ショートカットを書きたいと思います。
そして、テンプレートの特殊化や接尾辞の戻り値の構文など、より多くの状況でこれに遭遇しました。それで、最初の行と構造体/クラスまたは関数のusing
間の場所で(しゃれた意図なしで)使用する方法はありますか?.template <...>
,
(カンマ) のようなものを使用してみましたが(using X = ... , /*actually using X*/)
、成功しませんでした。
機能したのはグローバルスコープでしたusing
template <class Iterator>
using DT = typename DereferenceType<Iterator>::type&;
しかし、グローバル スコープは必要ありません。使用するテンプレートだけにスコープを適用したいのです。そして、私は書きたくありませDT<Iterator>
んDT
。
言うまでもなく、マクロやプリプロセッサ ディレクティブは問題外です。
実際の例:
template <class Iterator, class GetCompValue, class SortOrder = Ascending>
typename std::enable_if<
IsDereferenceable<Iterator>::value &&
IsCallableLike<GetCompValue,
typename DereferenceType<Iterator>::type&(
typename DereferenceType<Iterator>::type&)>::value &&
IsSortOrder<SortOrder>::value, void>::type
RadixSortLSDByteOffsetIter(Iterator first, Iterator last,
GetCompValue get_comp_value, SortOrder = kAscending) {
typename DereferenceType<Iterator>::type&
ここで、次のようなショートカットが必要です。
template <class Iterator, class GetCompValue, class SortOrder = Ascending>
// using DT = typename DereferenceType<Iterator>::type&;
typename std::enable_if<
IsDereferenceable<Iterator>::value &&
IsCallableLike<GetCompValue, DT(DT)>::value &&
IsSortOrder<SortOrder>::value, void>::type
RadixSortLSDByteOffsetIter(Iterator first, Iterator last,
GetCompValue get_comp_value, SortOrder = kAscending) {
ありがとうございました。