読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

_com_ptr_tとテンプレートエイリアス

VC++2013ではテンプレートエイリアスがサポートされてゐるので、_com_ptr_tの型宣言の際にマクロに賴らなくても綺麗に書けるのではと思つて試してみた。

template <typename T>
using com_ptr = _com_ptr_t<_com_IIID<T, &__uuidof(T)>>;

int main() {
  com_ptr<ID2D1Factory> factory;
}

通󠄁つて欲しかつたがコンパイラの內部エラーを踏んでしまつた。矢張り__uuidofみたいなMSVC獨自のものが絡んでゐるの所󠄁爲なのだらうか。
[追󠄁記]


と云ふ指摘がtwitterを見てたらあつたので試してみた。

template <typename T>
struct com_ptr_t {
  using type = _com_ptr_t<_com_IIID<T, &__uuidof(T)>>;
};

template <typename T>
using com_ptr = typename com_ptr_t<T>::type;

int main() {
  com_ptr<ID2D1Factory> factory;
}

確かに通󠄁る樣になつた。