2

テンプレート クラス A には、テンプレート クラスの静的関数を呼び出す関数が含まれています。

template <typename T>
void A<T>::fun() {
    T obj = T::create();
    ....
}

T = B* のときにこのコードを機能させたい場合、これをどのように変更すればよいですか? (*T)::create() を実行できないことはわかっていますが、概念的には、それが私が望んでいることです。

4

1 に答える 1

5

std::remove_pointer型特性を使用できます:

#include <type_traits>

template <typename T>
void A<T>::fun() {
    T obj = std::remove_pointer<T>::type::create();
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    // ...
}

両方std::remove_pointer<U*>::typestd::remove_pointer<U>::type与えUます。

于 2013-06-02T13:22:22.190 に答える